hdu 1058 && poj 2247

#include <stdio.h>
#include <iostream>

using namespace std;

int a[5850];

int Min(int a, int b, int c, int d){

   int x = a < b ? a : b;
   int y = c < d ? c : d;
   return x < y ? x : y;
}

int main()
{
   int n;
   int i = 1;
   int d1, d2, d3, d4;
   d1 = d2 = d3 = d4 = 0;
   a[0] = 1;
   while(i < 5843){
    int temp = Min(2*a[d1], 3*a[d2], 5*a[d3], 7*a[d4]);
       if(2*a[d1] == temp)  d1 ++;
       if(3*a[d2] == temp)  d2 ++;
       if(5*a[d3] == temp)  d3 ++;
       if(7*a[d4] == temp)  d4 ++;
       a[i] = temp;
       i ++ ;
   }
   while(cin >> n){
    if(n == 0) break;
     cout << "The " << n ;
     if(n % 10 == 1 && n % 100 != 11) cout << "st " ;
     else if(n % 10 == 2 && n % 100 != 12) cout << "nd " ;
     else if(n % 10 == 3 && n % 100 != 13 ) cout << "rd " ;
     else cout << "th " ;
     cout << "humble number is " << a[n-1] << "." << endl;
   }
   return 0;
}


此题主要思路是a[i] = 2 (3 , 5 , 7) * a[i-1] ,因为 6 = 2 * 3 = 3 * 2,所以必须同时加一。

1 = 1; a[1]

2 = 2 * 1;a[2]

3 = 3 * 1;a[3]

4 = 2 * 2;a[4]

5 = 5 * 1;a[5]

6 = 2 * 3 = 3 * 2;a[6]

7 = 7 * 1; a[7]

8 = 2 * 4;  a[8]

9 = 3 * 3; a[9]

posted @ 2013-10-15 14:31  i梦  阅读(136)  评论(0)    收藏  举报