C语言代码练习(第十七天)

今日练习:

45、输出100-1000之间所有的“水仙花数”,所为的水仙花数是一个三位数,其各位数字立方和等于该数本身。例如153是一个水仙花数。因为1*1*1+5*5*5+3*3*3

 46、一个数如果恰好等于它的因子之和,这个数就称为"完数"。编程找出1000之内的所有完数,并输出其因子。例子:6的因子为1, 2, 3,而6 = 1 + 2 + 3,因此6是"完数"。

47、一个球从100m高度自由落下,每次落地后反跳回原高度的一半,再落下,再反弹, 求它在第10次落地时,共经过多少米,第10次反弹多高。

 输出100-1000之间所有的“水仙花数”,所为的水仙花数是一个三位数,其各位数字立方和等于该数本身。例如153是一个水仙花数。因为1*1*1+5*5*5+3*3*3

题解思路

当我们要求100-1000之间的自幂数时,首先我们要用for循环遍历数字,然后判断这些数字是否是自幂数。要判断自幂数时,首先要确定这个数是几位数。然后求每一个数字的每一位,然后合计判断是否满足条件。(本题解决思路来源“小小分享君”的博客《水仙花数的求解》

运行代码

//方法一
int main()
{
	int i = 0;
	int j = 0;
	int k = 0;
	int num = 0;
	printf("水仙花数为:\n");
	for (num = 100; num < 1000; num++)
	{
		i = num / 100;
		j = num / 10 - i * 10;
		k = num % 10;
		if (num == i * i * i + j * j * j + k * k * k)
		{
			printf(" %d ", num);
		}
	}
	printf("\n");
	return 0;
}
//方法二
int main()
{
    printf("100-1000之间是水仙花数为:");
    for (int i = 100; i <= 1000; i++)
    {
        int count = 0;
        int tmp = i;
        while (tmp != 0)//计算有多少个数字
        {
            count++;
            tmp /= 10;
        }
        tmp = i;
        int sum = 0;
        while (tmp != 0)//求一个数字的每一位
        {
            sum += pow(tmp % 10, count);//pow 函数是C语言中数学函数库中的一个幂函数,使用前要先引用
            tmp /= 10;
        }
        if (sum == i)
        {
            printf(" %d ", i);
        }
    }
    printf("\n");
    return 0;
}

运行结果

一个数如果恰好等于它的因子之和,这个数就称为"完数"。编程找出1000之内的所有完数,并输出其因子。例子:6的因子为1, 2, 3,而6 = 1 + 2 + 3,因此6是"完数"。

运行代码

int main()
{
	int number = 0;
	int s = 0;
	int i = 0;
	for (number = 2; number < 1000; number++)
	{
		s = 0;
		for (i = 1; i < number; i++)
		{
			if ((number % i) == 0)//检查i是不是number的因子
			{
				s = s + i;
			}
		}
		if (s == number)
		{
			printf("%d 的因子为:", number);
			for (i = 1; i < number; i++)
			{
				if (number % i == 0)//判断是否是因子
				{
					printf(" %d ", i);
				}
			}
			printf("\n");
		}
	}
	return 0;
}

运行结果

一个球从100m高度自由落下,每次落地后反跳回原高度的一半,再落下,再反弹,求它在第10次落地时,共经过多少米,第10次反弹多高。

解题思路

运行代码

int main()
{
	double height = 0;
	double bounce_height = 0;
	height = 100;
	bounce_height = height / 2;
	int n = 0;
	for (n = 2; n <= 10; n++)
	{
		height = height + 2 * bounce_height;
		bounce_height = bounce_height / 2;
	}
	printf("第10次落地时共经过%f米\n", height);
	printf("第10次反弹%f米\n", bounce_height);
	return 0;
}

运行结果

  • 23
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值