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]

浙公网安备 33010602011771号