符合数 A 定义的数
d(n) = n + n 的各位之和
d(78) = 78 + 7 + 8 = 93
定义数 A :数 A 找不到一个数 B 可有 d(B) = A ,即 A 不能由其他数生成。
找出 1 - 10000 里所有符合数 A 的数。
根据 d 的定义 d(a) = b,我们知道对每一个 a 有 a < b
要找到 1 - 10000 里所有的符合 A 的数,即是找到不存在 d(B) = A 的数 A 。
可以设定一个 10001 大小的数组,遍历整个数组,计算每个下标 B 对应的 d(B) A 。将以 A 为下标的元素设置状态。
遍历完后,即可确定要找的符合数 A 的数。
1 #include <iostream>
2 using namespace std;
3
4 int sum(int n)
5 {
6 int ret = 0;
7 while (n != 0)
8 {
9 ret += n % 10;
10 n /= 10;
11 }
12 return ret;
13 }
14
15 void findA(int a[], int n)
16 {
17 memset(a, 0, sizeof (*a) * n);
18 int t = 0;
19 for (int i = 1; i <= n; ++i)
20 {
21 if ((t = i + sum(i) <= n))
22 {
23 a[i + sum(i)] = 1;
24 }
25 }
26 }
27
28 int main()
29 {
30 int n;
31 const int size = 10001;
32 int a[size + 1];
33
34 findA(a, size);
35
36 for (int i = 1; i <= size; ++i)
37 {
38 if (a[i] == 0)
39 {
40 cout << i << ' ';
41 }
42 }
43 cout << endl;
44
45 return 0;
46 }
posted on 2011-07-19 21:59
unixfy 阅读(148)
评论(0) 编辑 收藏 引用