比赛的时候TLE,然后就想能不能把整个需要的值先求出来,然后在查找输出。。。不幸的是,当时没想起来怎么利用2,3,5,7来产生所有的数。。。参考了一下别人的。。。
更纠结的是:英语不好,输出st,rd,nd,th一大堆的。。。。啊啊啊啊啊啊啊啊啊
#include<stdio.h>
int min(int x,int y)
{
return (x>y)?y:x;
}
int main()
{
int n,i,k,a[5843],num2,num3,num5,num7;
a[1]=i=num2=num3=num5=num7=1;
while(a[i]<2000000000)
{
a[++i]=min(2*a[num2],min(3*a[num3],min(5*a[num5],7*a[num7])));
if(a[i]==2*a[num2])
num2++;
if(a[i]==3*a[num3])
num3++;
if(a[i]==5*a[num5])
num5++;
if(a[i]==7*a[num7])
num7++;
}
while(scanf("%d",&n)&&n)
{
if(n%100==11 || n%100==12 || n%100==13 )
printf("The %dth humble number is %d.\n",n,a[n]);
else if(n%10==1)
printf("The %dst humble number is %lld.\n",n,a[n]);
else if(n%10==2)
printf("The %dnd humble number is %lld.\n",n,a[n]);
else if(n%10==3)
printf("The %drd humble number is %lld.\n",n,a[n]);
else
printf("The %dth humble number is %lld.\n",n,a[n]);
}
return 0;
}