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 }