- 主题:请教一道小学奥数题
0不能做差得到
【 在 wushunchao 的大作中提到: 】
: 为啥?因为3a不能被其余三个作差得出?
: --
发自「今日水木 on iPhone XS」
--
FROM 123.113.225.*
哦哦,对,忘了管0了都。
【 在 babyjia 的大作中提到: 】
: 0不能做差得到
: 发自「今日水木 on iPhone XS」
--
FROM 183.222.199.*
答案错了吧 印刷错位了 :)
我用程序跑了下 也是159
【 在 babyjia 的大作中提到: 】
: 答案我做的是159。不知道为什么是195?
: 发自「今日水木 on iPhone XS」
--
FROM 101.86.40.*
我也怀疑答案错了
【 在 babyjia 的大作中提到: 】
: 若一个四位数,它的任意两位数字之差均等于它的某个数字,且每个数字都能作为差被取到。例如2022。而1234则不符合。问这样的数有多少个?
:
: 发自「今日水木 on iPhone XS」
: --
发自「今日水木 on iPhone XS」
--
FROM 123.113.225.*
感谢大家的热心回复。谢谢?
【 在 babyjia 的大作中提到: 】
: 若一个四位数,它的任意两位数字之差均等于它的某个数字,且每个数字都能作为差被取到。例如2022。而1234则不符合。问这样的数有多少个?
:
: 发自「今日水木 on iPhone XS」
: --
发自「今日水木 on iPhone XS」
--
FROM 123.113.225.*
请教一下,怎么优雅地实现数位上数字两两作差,以及比较?
只能想到暴力的作差,判断起来也挺复杂
【 在 sierrisi 的大作中提到: 】
: 答案错了吧 印刷错位了 :)
: 我用程序跑了下 也是159
--
FROM 183.131.109.*
counter = 0
for num in range(1000,10000):
digits = []
for i in range(0,4):
digits.append(num//(10**i)%10)
#print(digits)
diff = []
for j in range(1,4):
for k in range(0,j):
diff.append(abs(digits[j]-digits[k]))
#print(diff)
if set(digits) == set(diff):
counter+=1
优雅不
【 在 easior 的大作中提到: 】
: 请教一下,怎么优雅地实现数位上数字两两作差,以及比较?
: 只能想到暴力的作差,判断起来也挺复杂
--
FROM 223.71.29.*
让我打开 Python 试试啊
感觉上来说,有了高级数据结构,
比如这里的 set,算法也变得简单(优雅)了
趁有空模仿了一下,也来个蹩脚的 C++ 版
#include <iostream>
#include <cmath>
#include <vector>
#include <set>
int main()
{
int counter = 0;
for (int num=1000; num<10000; num++) {
std::vector<int> digits;
std::vector<int> diff;
int p=1;
for (int i=0; i<4; i++) {
digits.push_back((num/p)%10);
p *= 10;
}
for (int j=1; j<4; j++)
for (int k=0; k<j; k++)
diff.push_back(std::abs(digits[j]-digits[k]));
std::set<int> dg(digits.begin(), digits.end());
std::set<int> df(diff.begin(), diff.end());
if (dg==df)
counter += 1;
}
std::cout << counter << std::endl;
return 0;
}
【 在 lovellc 的大作中提到: 】
: counter = 0
: for num in range(1000,10000):
: digits = []
: for i in range(0,4):
: digits.append(num//(10**i)%10)
: #print(digits)
: diff = []
: for j in range(1,4):
: for k in range(0,j):
: diff.append(abs(digits[j]-digits[k]))
: #print(diff)
: if set(digits) == set(diff):
: counter+=1
: 优雅不
--
修改:easior FROM 183.131.109.*
FROM 183.131.109.*
0不能
【 在 wushunchao 的大作中提到: 】
: 为啥?因为3a不能被其余三个作差得出?
:
--
FROM 106.39.50.*
159
【 在 easior 的大作中提到: 】
让我打开 Python 试试啊
感觉上来说,有了高级数据结构,
比如这里的 set,算法也变得简单(优雅)了
趁有空模仿了一下,也来个蹩脚的 C++ 版
#include <iostream>
#include <cmath>
#include <vector>
#include <set>
int main()
{
int counter = 0;
for (int num=1000; num<10000; num++) {
std::vector<int> digits;
std::vector<int> diff;
int p=1;
for (int i=0; i<4; i++) {
digits.push_back((num/p)%10);
p *= 10;
}
for (int j=1; j<4; j++)
for (int k=0; k<j; k++)
diff.push_back(std::abs(digits[j]-digits[k]));
std::set<int> dg(digits.begin(), digits.end());
std::set<int> df(diff.begin(), diff.end());
if (dg==df)
counter += 1;
}
std::cout << counter << std::endl;
return 0;
}
【 在 lovellc 的大作中提到: 】
: counter = 0
: for num in range(1000,10000):
: digits = []
: for i in range(0,4):
: digits.append(num//(10**i)%10)
: #print(digits)
: diff = []
: for j in range(1,4):
: for k in range(0,j):
: diff.append(abs(digits[j]-digits[k]))
: #print(diff)
: if set(digits) == set(diff):
: counter+=1
: 优雅不
--
修改:easior FROM 183.131.109.*
FROM 58.48.87.*