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
  1. #include <stdio.h>
  2. #include <math.h>
  3. int main(void) {
  4.     int m, n, i, j, k, sum, temp,flag=1;
  5.     int a[10];
  6.     scanf(“%d%d”, &m, &n);
  7.     for(i = m; i <= n; ++i) {
  8.         sum = 1;
  9.         for(j = 2; j <= sqrt(i); ++j) {
  10.             if(i % j == 0) {
  11.                 sum += j;
  12.                 temp = i / j;
  13.                 if(temp > j && temp < i)
  14.                     sum += temp;
  15.             }
  16.         }
  17.         if(sum == i) {
  18.             k = 0;
  19.             flag = 0;
  20.             a[k++] = 1;
  21.             for(j = 2; j <= i / 2; ++j) {
  22.                 if(i % j == 0)
  23.                 a[k++] = j;
  24.             }
  25.             printf(“%d = “, i);
  26.             for(j = 0; j < k – 1; ++j)
  27.                 printf(“%d + “, a[j]);
  28.             printf(“%d\n”, a[k – 1]);
  29.         }
  30.     }
  31.     if(flag) printf(“None”);
  32. }

7-8 高空坠球(20 分)

皮球从某给定高度自由落下,触地后反弹到原高度的一半,再落下,再反弹,……,如此反复。问皮球在第次落地时,在空中一共经过多少距离?第次反弹的高度是多少?

输入格式:

输入在一行中给出两个非负整数,分别是皮球的初始高度和,均在长整型范围内。

输出格式:

在一行中顺序输出皮球第次落地时在空中经过的距离、以及第次反弹的高度,其间以一个空格分隔,保留一位小数。题目保证计算结果不超过双精度范围。

输入样例:

33 5

输出样例:

94.9 1.0

 

  1. #include <stdio.h>
  2. int main()
  3. {
  4.     long long h,i,n;
  5.     double height,sum;
  6.     scanf(“%lld%lld”,&h,&n);
  7.     sum = height = h;
  8.     if (n==0){
  9.         sum = height = 0;
  10.     }
  11.     for(i=2;i<=n;i++){
  12.         sum += height;
  13.         height = height*1.0/2;
  14.     }
  15.     printf(“%.1lf %.1lf”,sum,height*1.0/2);
  16. }