posts - 183,  comments - 10,  trackbacks - 0

符合数 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, 0sizeof (*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)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理