hdu 1058 Humble Numbers

链接:http://acm.hdu.edu.cn/showproblem.php?pid=1058

只需要前5842个满足条件的数,打好一张表。

#include<stdio.h>
int num[6000];
int min(int a,int b,int c,int d)
{
	int i,j;
	if(a<b)
		i=a;
	else
		i=b;
	if(c<d)
		j=c;
	else
		j=d;
	return i>j?j:i;
}
int main()
{
	int n,i;
	int a1,a2,a3,a4,e1,e2,e3,e4;
	a1=a2=a3=a4=1;
	num[1]=1;
	//相当于四个队列,但每次只用一个队列的数字
	for(i=2;i<=5842;i++)
	{
		e1=num[a1]*2;
		e2=num[a2]*3;
		e3=num[a3]*5;
		e4=num[a4]*7;
		num[i]=min(e1,e2,e3,e4);
		if(num[i]==e1)
			a1++;
		if(num[i]==e2)
			a2++;
		if(num[i]==e3)
			a3++;
		if(num[i]==e4)
			a4++;
	}
	while(scanf("%d",&n)&&n)
	{
		printf("The %d",n);
		if(n<10)
		{
			if(n==1)
				printf("st");
			else if(n==2)
				printf("nd");
			else if(n==3)
				printf("rd");
			else
				printf("th");
		}
		else
		{
			if(n%10==1&&n%100!=11)
				printf("st");
			else if(n%10==2&&n%100!=12)
				printf("nd");
			else if(n%10==3&&n%100!=13)
				printf("rd");
			else
				printf("th");
		}
		printf(" humble number is %d.\n",num[n]);
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值