今日练习:
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;
}