Digit Generator Uva1583
题意:
a加上 a的各位数=b,则b是a的digitSum,a是b的generator,现在给你digitSum,让你求它的最小的generator。
我的思路:每一位数最大也就是9那么他最多可以加a数的位数个数*9的数量。一个一个枚举复杂度也不高。
书上的思路:预处理打表把1到100000的digitsum求出来并保留最小的。
我的代码:
1 #include<stdio.h> 2 int main(){ 3 int T; 4 scanf("%d",&T); 5 while(T--){ 6 int N,nhint; 7 scanf("%d",&N); 8 nhint=N; 9 int num=0; 10 while(nhint){ 11 num++; 12 nhint/=10; 13 } 14 int i=N-num*9; 15 for(;i<N;i++){ 16 int j=i,sum=0; 17 while(j){ 18 sum+=j%10; 19 j/=10; 20 } 21 if(sum+i==N){ 22 printf("%d\n",i); 23 break; 24 } 25 26 } 27 28 if(i==N) 29 printf("0\n"); 30 31 } 32 return 0; 33 }
书上的代码:
1 #include<stdio.h> 2 #include<string.h> 3 #define maxn 100005 4 int ans[maxn]; 5 6 int main(){ 7 int T,n; 8 memset(ans,0,sizeof(ans)); 9 10 for(int m=1;m<maxn;m++){ 11 int x=m,y=m; 12 while(x>0){y+=x%10;x/=10;} 13 if(ans[y]==0||m<ans[y])ans[y]=m; 14 } 15 scanf("%d",&T); 16 while(T--){ 17 scanf("%d",&n); 18 printf("%d\n",ans[n]); 19 } 20 return 0; 21 }

浙公网安备 33010602011771号