数学题目,感觉用数学应该可以解,应该有规律吧,打个表输出下?
动态规划就是用前面算出来的数去算后面的,这些数无非是2,3,5,7的倍数
dp[1]=1,
dp[count]=Min(Min(dp[i]*2,arry[j]*3),Min(dp[k]*5,dp[l]*7));
if(dp[count]==dp[i]*2) i++;
if(dp[count]==dp[j]*3) j++;
if(dp[count]==dp[k]*5) k++;
if(dp[count]==dp[l]*7) l++;
全部判断一遍是使重叠部分(例如6,15,14这种)都往上进1.
代码:
#include<stdio.h>
#include<string.h>
int arry[6000];
int Min(int x,int y)
{
return x<=y?x:y;
}
int main()
{
int i,j,k,l;
int a,b,c,d;
int count,n,ans;
i=1,j=1,k=1,l=1;
arry[1]=1;
count=2;
//memset(arry,0,sizeof(arry));
while(count<=5842)
{
arry[count]=Min(Min(arry[i]*2,arry[j]*3),Min(arry[k]*5,arry[l]*7));
if(arry[count]==arry[i]*2) i++;
if(arry[count]==arry[j]*3) j++;
if(arry[count]==arry[k]*5) k++;
if(arry[count]==arry[l]*7) l++;
count++;
}
while(scanf("%d",&n)!=EOF && n!=0)
{
if(n%10==1 && n%100!=11) printf("The %dst humble number is %d.\n",n,arry[n]);
else if(n%10==2 && n%100!=12) printf("The %dnd humble number is %d.\n",n,arry[n]);
else if(n%10==3 && n%100!=13) printf("The %drd humble number is %d.\n",n,arry[n]);
else printf("The %dth humble number is %d.\n",n,arry[n]);
}
return 0;
}