程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> acm icpc-一道openjudge的題目問下,

acm icpc-一道openjudge的題目問下,

編輯:編程綜合問答
一道openjudge的題目問下,

列出完數的一個題目問下
查看 提交 統計 提問
總時間限制: 1000ms 內存限制: 1024kB
描述
自然數中,完數寥若晨星,請在從1 到某個整數范圍中打印出所有的完數來。所謂“完數”是指一個數恰好等於它的所有不同因子之和。例如,6 是完數,因為6=1+2+3。而24不是完數,因為24≠ +2+3+4+6+8+12(=36)。

輸入
輸入數據中含有一些整數n(1
輸出
對於每個整數n,輸出所有不大於n 的完數。每個整數n 的輸出由n 引導,跟上冒號,然後是由空格開道的一個個完數,每個n 的完數列表應占獨立的一行。
樣例輸入
100
5000
0
樣例輸出
100: 6 28
5000: 6 28 496
————————————————————————————————
我寫的代碼一直沒辦法accept
————————————————————————————
#include “stdio.h”
#include "math.h"
int main()
{
long long int sum=1;
int i,j,k;
char ch;
int count=0;
long long int b[100];
for(i=1;i<=12;i++)
{
sum*=i;
}
while(scanf("%ld",&b[i])==1)
{
if((ch=getchar())==EOF)
{
break;
}
i++;
}
for(j=0;j<i;j++)
for(k=j+1;k<i;k++)
{
if(b[k]*b[j]==sum)
{
count++;
}

}
printf("%d",count);
return 0;
}——————————————————————
不知道怎麼改好。。。
題目網址。。
——————————————
http://jmu.openjudge.cn/stl/T2/
——————————————————————

最佳回答:


 #include <cstdlib>
#include <iostream>
#include <vector>
#include <cstdio>

using namespace std;

const int MAX = 10000;

int main(int argc, char *argv[])
{
    vector<int> vec;

    for(int i=2; i<MAX; i++)
    {    
        int sum = 0;

        for(int j=1; j<=i/2; j++)
        {
            if(i % j ==0)
                sum += j;
        }

        if(sum == i)
            vec.push_back(i);                   
    }

    int n;   
    while(cin >> n)
    {      
        cout << n <<":";
        int count = vec.size();

        for(int i=0; i<count; i++)
        {
            if(vec[i] <= n)
                cout << " " << vec[i];
            else
                break;
        }

        cout << endl;
    }

    return EXIT_SUCCESS;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved