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 }

 

posted @ 2020-08-02 12:13  MurphyVan  阅读(51)  评论(0)    收藏  举报