poj2247(hud1058)--Humble Numbers (模拟)
大概意思:
1在这个集合内
集合内的元素的2 、3 、 5 、 7 倍 ,也是这个集合内的数
这样就有了前面: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27, ...
给你一个数x,输出集合中第x项的值
注意 "st", "nd", "rd", or "th" 这些的处理
View Code
1 #include <stdio.h> 2 3 int minn(int a,int b,int c,int d) 4 { 5 if(a<=b && a<=c && a<=d) 6 return a; 7 if(b<=a && b<=c && b<=d) 8 return b; 9 if(c<=a && c<=b && c<=d) 10 return c; 11 return d; 12 } 13 14 int main(void) 15 { 16 int a[5843]; 17 int i,i2,i3,i5,i7,n; 18 a[1]=1; 19 i2 = i3 = i5 = i7 = 1; 20 for(i=2;i<=5842;i++) 21 { 22 a[i] = minn(a[i2]*2,a[i3]*3,a[i5]*5,a[i7]*7); 23 if(a[i]==a[i2]*2) 24 i2++; 25 if(a[i]==a[i3]*3) 26 i3++; 27 if(a[i]==a[i5]*5) 28 i5++; 29 if(a[i]==a[i7]*7) 30 i7++; 31 } 32 while(scanf("%d",&n)!=EOF && n) 33 { 34 printf("The %d",n); 35 if(n % 10 == 1){ 36 if(n % 100 == 11) 37 printf("th"); 38 else 39 printf("st"); 40 } 41 else if(n % 10 == 2){ 42 if(n % 100 == 12) 43 printf("th"); 44 else 45 printf("nd"); 46 } 47 else if(n % 10 == 3){ 48 if(n % 100 == 13) 49 printf("th"); 50 else 51 printf("rd"); 52 } 53 else 54 printf("th"); 55 printf(" humble number is %d.\n",a[n]); 56 } 57 return 0; 58 }


浙公网安备 33010602011771号