题意:给你四个数2,3,5,7, 只以这四个数为因数的数能组成一个有序序列,问这个序列第n个数是多少
思路:一共有5千多个数可以用打表,但关键是怎么生成这些数,其实就是用前面的数乘以那四个数然后取最小
思路:一共有5千多个数可以用打表,但关键是怎么生成这些数,其实就是用前面的数乘以那四个数然后取最小
#include<stdio.h>
#include<string.h>
#define maxN 5843
int key[maxN];
int min(int x,int y){return x<y?x:y;}
void fun()
{
int k[10],a[10],t[10];
for(int i=1;i<=4;i++)
k[i]=1,t[i]=1;
a[1]=2,a[2]=3,a[3]=5,a[4]=7;
key[1]=1;
for(int j=2;j<maxN;j++)
{
for(int i=1;i<5;i++)
t[i]=key[k[i]]*a[i];
int minn=2000000100;
for(int i=1;i<5;i++)
minn=min(minn,t[i]);
key[j]=minn;
for(int i=1;i<5;i++)
if(minn==t[i])
k[i]++;
}
}
int main()
{
int n;
fun();
while(scanf("%d",&n)&&n)
{
int a=n%10,b=n%100;
printf("The %d",n);
if(b!=11&&a==1)printf("st ");
else if(b!=12&&a==2)printf("nd ");
else if(b!=13&&a==3)printf("rd ");
else printf("th ");
printf("humble number is %d.\n",key[n]);
}
}