作业记录 07 漂数

lcy最近在上数学课,老师给了他一个问题,让他求出第n个漂数。
漂数,是指它的素数因子只有2,3,5,7。
例如前20个漂数为1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27, ... 
lcy想请聪明的你,写个程序帮帮他求出第n个漂数。
ball ball you!!

输入

多组样例,输入一个n(n≤5842),代表第n个漂数

输出

对每一组样例输出The nth humble number is number.。针对每一个n,正确的后缀有"st", "nd", "rd", "th"

#include <stdio.h>
int Min(int a, int b, int c, int d)
{
	int min = a;
	min = min < b ? min : b;
	min = min < c ? min : c;
	min = min < d ? min : d;
	return min;
}
int main(void)
{
	int p_number[5842];//漂数表
	p_number[0] = 1;
	int two_i = 0, three_i = 0, five_i = 0, seven_i = 0;
	for (int i = 1; i < 5842; i++)
	{
		p_number[i] = Min(2 * p_number[two_i], 3 * p_number[three_i], 5 * p_number[five_i], 7 * p_number[seven_i]);
		if (p_number[i] == 2 * p_number[two_i])
			two_i++;
		if (p_number[i] == 3 * p_number[three_i])
			three_i++;
		if (p_number[i] == 5 * p_number[five_i])
			five_i++;
		if (p_number[i] == 7 * p_number[seven_i])
			seven_i++;
	}//制作漂数表
	int n = 0;//n表示第n个数
	while (scanf("%d", &n) != EOF)
	{
		char ch_1 = 116, ch_2 = 104;//t的ASCII值为116,h的ASCII值为104
		if (n % 100 < 10 || n % 100 > 19)
		{
			switch (n % 10)
			{
			case 1: ch_1 = 115; ch_2 = 116; break;//s的ASCII值为115
			case 2: ch_1 = 110; ch_2 = 100; break;//n的ASCII值为110,d的ASCII值为100
			case 3: ch_1 = 114; ch_2 = 100; break;//r的ASCII值为114
			}
		}
		printf("The %d%c%c humble number is %d.\n", n, ch_1, ch_2, p_number[n - 1]);
	}
	return 0;
}

漂数数列中,每个漂数可以看出是前面某个漂数乘2/3/5/7

而且每个漂数只能产生4个新的漂数(即2/3/5/7倍的它本身)

同时注意11/12/13的英文后缀为th,而不是st/nd/rd(111,211,311也是如此)

  • 14
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值