思路:所有的数均为 2^a*3^b*5^c*7^d 构成
因为因子一共只有4个, 一个humble number可以写成2^a*3^b*5^c*7^d的形式;
然后枚举abcd,计算出每一个humble number,再排序即可!
但是注意从小到大排序
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
#define N 6000
int a[N], c[4];
int main()
{
int x, y, z, w;
x = y = w = z = 1;
a[0] = 1;
int temp;
for (int i = 1; i<N; i++)
{
c[0] = a[x - 1] * 2;
c[1] = a[y - 1] * 3;
c[2] = a[z - 1] * 5;
c[3] = a[w - 1] * 7;
temp = c[0];
for (int j = 1; j<4; j++)
if (c[j]<temp)
temp = c[j];
if (c[0] == temp)
x++;
if (c[1] == temp)
y++;
if (c[2] == temp)
z++;
if (c[3] == temp)
w++;
a[i] = temp;
}
int n;
while (~scanf("%d", &n) && n)
{
if (n % 10 == 1 && n % 100 != 11)
printf("The %dst humble number is %d.\n", n, a[n - 1]);
else if (n % 10 == 2 && n % 100 != 12)
printf("The %dnd humble number is %d.\n", n, a[n - 1]);
else if (n % 10 == 3 && n % 100 != 13)
printf("The %drd humble number is %d.\n", n, a[n - 1]);
else
printf("The %dth humble number is %d.\n", n, a[n - 1]);
}
return 0;
}