网上说是水题 。。。
思想:
每一个数都是由前面的数*2 *3 *5 *7得到,那就用a b c d四个指针记录。
另外可能会出现重复的情况,要判断一下。
#include <bits/stdc++.h>
using namespace std;
const int maxn=5845;
int dp[maxn];
int main()
{
dp[1]=1;
int a,b,c,d,i,j;
a=b=c=d=1;
for(i=2;i<maxn;i++){
int t=min(dp[a]*2,min(dp[b]*3,min(dp[c]*5,dp[d]*7)));
if(dp[i-1]==t){
i--;
}else{
dp[i]=t;
}
if(t==dp[a]*2) ++a;
else if(t==dp[b]*3) ++b;
else if(t==dp[c]*5) ++c;
else if(t==dp[d]*7) ++d;
}
int t;
while(EOF!=scanf("%d",&t) && t){
if(t%10==1&&t%100!=11) printf("The %dst humble number is %d.\n",t,dp[t]);
else if (t%10==2&&t%100!=12) printf("The %dnd humble number is %d.\n",t,dp[t]);
else if (t%10==3&&t%100!=13) printf("The %drd humble number is %d.\n",t,dp[t]);
else printf("The %dth humble number is %d.\n",t,dp[t]);
}
return 0;
}