7-6 找完数(20 分)
所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。本题要求编写程序,找出任意两正整数和之间的所有完数。
输入格式:
输入在一行中给出2个正整数和(),中间以空格分隔。
输出格式:
逐行输出给定范围内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + … + 因子k”,其中完数和因子均按递增顺序给出。若区间内没有完数,则输出“None”。
输入样例:
2 30
输出样例:
6 = 1 + 2 + 3
28 = 1 + 2 + 4 + 7 + 14
- #include <stdio.h>
- #include <math.h>
- int main(void) {
- int m, n, i, j, k, sum, temp,flag=1;
- int a[10];
- scanf(“%d%d”, &m, &n);
- for(i = m; i <= n; ++i) {
- sum = 1;
- for(j = 2; j <= sqrt(i); ++j) {
- if(i % j == 0) {
- sum += j;
- temp = i / j;
- if(temp > j && temp < i)
- sum += temp;
- }
- }
- if(sum == i) {
- k = 0;
- flag = 0;
- a[k++] = 1;
- for(j = 2; j <= i / 2; ++j) {
- if(i % j == 0)
- a[k++] = j;
- }
- printf(“%d = “, i);
- for(j = 0; j < k – 1; ++j)
- printf(“%d + “, a[j]);
- printf(“%d\n”, a[k – 1]);
- }
- }
- if(flag) printf(“None”);
- }
7-8 高空坠球(20 分)
皮球从某给定高度自由落下,触地后反弹到原高度的一半,再落下,再反弹,……,如此反复。问皮球在第次落地时,在空中一共经过多少距离?第次反弹的高度是多少?
输入格式:
输入在一行中给出两个非负整数,分别是皮球的初始高度和,均在长整型范围内。
输出格式:
在一行中顺序输出皮球第次落地时在空中经过的距离、以及第次反弹的高度,其间以一个空格分隔,保留一位小数。题目保证计算结果不超过双精度范围。
输入样例:
33 5
输出样例:
94.9 1.0
- #include <stdio.h>
- int main()
- {
- long long h,i,n;
- double height,sum;
- scanf(“%lld%lld”,&h,&n);
- sum = height = h;
- if (n==0){
- sum = height = 0;
- }
- for(i=2;i<=n;i++){
- sum += height;
- height = height*1.0/2;
- }
- printf(“%.1lf %.1lf”,sum,height*1.0/2);
- }