暖冬的源码分享

 找回密码
 立即加入

QQ登录

只需一步,快速开始

搜索
热搜: 巧借
查看: 11076|回复: 2

[九度OJ] 题目1060:完数VS盈数

[复制链接]
发表于 2013-2-20 10:34:03 | 显示全部楼层 |阅读模式
题目描述:

    一个数如果恰好等于它的各因子(该数本身除外)子和,如:6=3+2+1。则称其为“完数”;若因子之和大于该数,则称其为“盈数”。
    求出2到60之间所有“完数”和“盈数”。

输入:

    题目没有任何输入。

输出:

    输出2到60之间所有“完数”和“盈数”,并以如下形式输出:
    E: e1 e2 e3 ......(ei为完数)
    G: g1 g2 g3 ......(gi为盈数)
    其中两个数之间要有空格,行尾不加空格。

样例输入:

样例输出:

来源:
    2000年清华大学计算机研究生机试真题
  1. #include <stdio.h>
  2. #include <math.h>
  3. int main()
  4. {
  5.     int sqrt_n, total, E[30] = {0}, G[30] = {0}, i = 0, j = 0;
  6.     for (int k = 2; k <= 60; k ++)
  7.     {
  8.         total = 1;
  9.         sqrt_n = (int)sqrt((float)k);
  10.         for (int m = 2; m <= sqrt_n; m ++)
  11.         {
  12.             if (k % m == 0 && m != (k / m))
  13.             {
  14.                 total += (m + k / m);
  15.             }
  16.         }
  17.         if (total == k)
  18.         {
  19.             E[i] = k;
  20.             i ++;
  21.         }
  22.         else if (total > k)
  23.         {
  24.             G[j] = k;
  25.             j ++;
  26.         }
  27.     }
  28.     printf("%s", "E:");
  29.     for (int s = 0; s < i; s ++)
  30.     {
  31.         printf(" %d", E[s]);
  32.     }
  33.     printf("\n%s", "G:");
  34.     for (int t = 0; t < j; t ++)
  35.     {
  36.         printf(" %d", G[t]);
  37.     }
  38.     printf("\n");
  39.     return 0;
  40. }
  41. /**************************************************************
  42.     Problem: 1060
  43.     User: greenrock
  44.     Language: C++
  45.     Result: Accepted
  46.     Time:10 ms
  47.     Memory:1020 kb
  48. ****************************************************************/
复制代码
回复

使用道具 举报

 楼主| 发表于 2013-2-20 10:35:38 | 显示全部楼层
C++ 的cin,cout的效率啊,哎!!
  1. #include <iostream>
  2. int main()
  3. {
  4.     using namespace std;
  5.     cout << "E: 6 28" << endl;
  6.     cout << "G: 12 18 20 24 30 36 40 42 48 54 56 60" << endl;
  7.     return 0;
  8. }
  9. /**************************************************************
  10.     Problem: 1060
  11.     User: greenrock
  12.     Language: C++
  13.     Result: Accepted
  14.     Time:10 ms
  15.     Memory:1508 kb
  16. ****************************************************************/
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-2-20 10:37:57 | 显示全部楼层
  1. #include <stdio.h>
  2. int main()
  3. {
  4.     printf("%s\n", "E: 6 28");
  5.     printf("%s\n", "G: 12 18 20 24 30 36 40 42 48 54 56 60");
  6.     return 0;
  7. }
  8. /**************************************************************
  9.     Problem: 1060
  10.     User: greenrock
  11.     Language: C++
  12.     Result: Accepted
  13.     Time:10 ms
  14.     Memory:1008 kb
  15. ****************************************************************/
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

本版积分规则

手机版|小黑屋|享码网 ( 京ICP备12003721号 )

GMT+8, 2024-3-29 15:06

Powered by Discuz! X3.5

Copyright © 2001-2021 Tencent Cloud.

快速回复 返回顶部 返回列表