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