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 }

 

 

 

posted @ 2012-09-21 20:59  Wheat″  阅读(235)  评论(0)    收藏  举报