TSC999 发表于 2016-12-10 10:40:14

这个程序运行结果不正确?不知哪里错了?

本帖最后由 TSC999 于 2016-12-10 10:41 编辑

求一个整数(例如 123456789)的各位数字之和,mathematica 可以用下面这指令:
lst = IntegerDigits         
Sum], {k, 1, Length}]
问题是:
我想统计 1,2,3,4,……,2015,2016 这个连续数列中, 各位数字之和等于 1 的有几个?等于 2 的有几个?……,等于 30 的有几个?
【注: 估计其中 1999 有最大的数字和,等于 1+9+9+9=28。】如何写程序? 看似简单,我写来写去玩不转。
(* 在 1,2,3,4,\,2015,2016 中,它们的各位数字和是 1,2,3,\\
\,28。问:每一种和数有多少个?*)

Table = 0, {i, 1, 30}];
For[i = 1, i <= 2016, i++,
lst = IntegerDigits;
s = Sum], {k, 1, Length}]]
For[j = 1, j <= 30, j++,
If = f + 1];
]
For[j = 1, j <= 30, j++,
Print]];
上面这个代码运行结果不正确。不知哪里错了?

kastin 发表于 2016-12-10 13:06:13

你相当于把Mathematica当做C语言来使用,但总是出错,为啥不直接用C语言?
MMA本身是一种符号语言,使用的是是函数式编程,这是最接近通常的数学思维习惯的表达,并且高效简洁。不要用C的思维来编写MMA程序,不仅编写的程序繁琐难读,而且效率也比函数式编写的要低。
Total /@ IntegerDigits@Range // Tally结果:
\[\left(
\begin{array}{cc}
1 & 4 \\
2 & 10 \\
3 & 18 \\
4 & 27 \\
5 & 38 \\
6 & 51 \\
7 & 66 \\
8 & 83 \\
9 & 102 \\
10 & 119 \\
11 & 133 \\
12 & 142 \\
13 & 148 \\
14 & 150 \\
15 & 148 \\
16 & 142 \\
17 & 132 \\
18 & 118 \\
19 & 100 \\
20 & 81 \\
21 & 64 \\
22 & 49 \\
23 & 36 \\
24 & 25 \\
25 & 16 \\
26 & 9 \\
27 & 4 \\
28 & 1 \\
\end{array}
\right)\]

zeroieme 发表于 2016-12-11 09:45:48

粗看了下,分号/(语句结束符)不正确。
页: [1]
查看完整版本: 这个程序运行结果不正确?不知哪里错了?