题意:只有2,3,5,7这几个质因子的数成为丑数,找出前5842个丑数
题目较水,这里说一点需要注意的地方,计算所有丑数时的if语句是并列的,不能用else if 这种形式,目的是为了排除相同的情况,具体可用 2,3分别乘以3 , 2进行一下推理
#include <iostream>
#include <stdio.h>
#include <cstring>
#include <cmath>
#define min4(a,b,c,d) min(min(a,b),min(c,d))
using namespace std;
int a[6000];
int n;
int p2,p3,p5,p7;//计数
int main()
{
freopen("in.txt","r",stdin);
p2=p3=p5=p7=1;
n=1;
a[1]=1;
while(a[n]<=2000000000&&n<6000)
{
a[++n]=min4(a[p2]*2,a[p3]*3,a[p5]*5,a[p7]*7);
if(a[n]==a[p2]*2)
p2++;
if(a[n]==a[p3]*3)
p3++;
if(a[n]==a[p5]*5)
p5++;
if(a[n]==a[p7]*7)
p7++;
}
while(scanf("%d",&n)!=EOF&&n)
{
printf("The %d",n);
if(n%10==1&&(n%100)/10!=1)
printf("st");
else if(n%10==2&&(n%100)/10!=1)
printf("nd");
else if(n%10==3&&(n%100)/10!=1)
printf("rd");
else
printf("th");
printf(" humble number is %d.\n",a[n]);
}
}