符合數 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 閱讀(150)
評論(0) 編輯 收藏 引用