Im_hear

导航

zoj 1095

View Code
View other humanCode
 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<iostream>
 4 using namespace std;
 5 int main()
 6 {
 7     int ham[5842];
 8     int a[4]={0,0,0,0};
 9     ham[0] = 1;
10     int i;
11     for(i = 1; i < 5842; i++)
12     {
13         ham[i] = min(min(2 * ham[a[0]],3 * ham[a[1]]),min(5 * ham[a[2]],7 * ham[a[3]]));
14         if(ham[i] == 2 * ham[a[0]]) a[0]++;
15         if(ham[i] == 3 * ham[a[1]]) a[1]++;
16         if(ham[i] == 5 * ham[a[2]]) a[2]++;
17         if(ham[i] == 7 * ham[a[3]]) a[3]++;    
18          
19     }
20     int n;
21     while(scanf("%d",&n),n)
22     {
23            if(n % 10 == 1 &&n %100!=11)
24            printf("The %dst humble number is %d.\n",n,ham[n-1]);
25            else if(n % 10 == 2 && n %100 != 12 )
26            printf("The %dnd humble number is %d.\n",n,ham[n-1]);
27            else if(n%10 == 3 && n %100!= 13)
28            printf("The %drd humble number is %d.\n",n,ham[n -1]);
29            else printf("The %dth humble number is %d.\n",n,ham[n -1 ]);               
30     }
31     return 0;
32 }

 

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <algorithm>
 4 using namespace std;
 5 
 6 typedef long long LL;
 7 
 8 const int N = 6000;
 9 LL ans[N] = {0};
10 
11 void getindex(int i);
12 void init(int n);
13 
14 int main()
15 {
16     int i = 0;
17     init(5842);
18     while(cin >> i && i){
19         getindex(i) ;
20     }
21     return 0;
22 }
23 void getindex(int i)
24 {
25     int k = i%10;
26     int p = i%100;
27     if(k > 3)k = 0;
28     else {
29               if(p < 20 && p > 10)k = 0;
30           }
31     
32     char ch[6][6] = {"th","st","nd","rd"};
33     printf("The %d%s humble number is %lld.\n",i,ch[k],ans[i]);
34     return ;
35 }
36 void init(int n)
37 {
38     int i = 1;
39     LL base[4] = {2,3,5,7};
40     for(i = 1; i <= 10; ++i){
41         ans[i] = i;
42     }
43     for(i = 11; i <= n; ++i){
44         LL add[4] = {0};
45         for(int j = 0; j < 4; ++j){
46             for(int k = i-1; k ; --k){
47                 if(ans[k]*base[j] > ans[i-1] && ans[k-1]*base[j] <= ans[i-1]){
48                     add[j] = ans[k]*base[j];
49                     break;
50                 }
51             }
52         }
53         LL f = add[0];
54         for(int d= 1; d< 4; ++d)if(add[d] < f)f = add[d];
55         ans[i] = f;
56     }
57     return ;
58 }

posted on 2012-04-26 10:44  Im_hear  阅读(128)  评论(0编辑  收藏  举报