题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1128
题意:一个数n,比如n=75,或者n=39,则n可以根据下面这种规则生成87与51这两个数,所以87跟51这两个数就不是self number,而当有一个数不能由其他数根据这种方法生成过来的时候,这个数就称为self number. d(75) = 75 + 7 + 5 = 87 d(39) = 39 + 3 + 9 = 51 There are thirteen self-numbers less than 100:
1, 3, 5, 7, 9, 20, 31, 42, 53, 64, 75, 86, and 97.
解题思路:直接打表打出所有 generator ,然后再筛选就行了。
代码:
#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define N 1000005
bool p[N];
int main()
{
memset(p,true,sizeof(p));
int q[13]={1,3,5,7,9,20,31,42,53,64,75,86,97};
for(int i=1;i<=N;i++)
{
int sum=i;
int k=i;
while(k>0)
{
sum=sum+k%10;
k=k/10;
}
p[sum]=false;
}
for(int i=0;i<13;i++)
printf("%d\n",q[i]);
for(int i=100;i<=N;i++)
if(p[i])
printf("%d\n",i);
return 0;
}