c语言求完全数问题求助~~

找完全数
成绩: 10 / 折扣: 0.8
完全数是其各因子之和正好等于本身的数,如6=1+2+3,28=1+2+4+7+14,所以6,8都是完全数,请编程找出2-20000内的所有完全数.输入整数n,输出第n个完全平方数。

 #include<stdio.h>
int main()
{
    int a,i,j=0,s=0,n,b[4];
    scanf("%d",&n);
    for(a=2;a<=20000;a++)
    {
        for(i=1,s=0;i<a;i++)
        {
            if(a%i==0) s=s+i;
        }

        if(s==a) {b[j]=a;j++;}
    }
    printf("%d\n",b[--n]);
    return 0;
}

请问这个程序有啥错误,vc上运行结果正确,但是提交到学校平台上显示无结果,超出时间限制。
图片说明

3个回答

 #include<stdio.h>
#include<time.h>
int main()
{
    clock_t t_s,t_e;
    int a,i,j=0,s=0,n,b[4];
    scanf("%d",&n);
    t_s = clock();
    for(a=2;a<=20000;a++)
    {
        for(i=1,s=0;i<a;i++)
        {
            if(a%i==0) s=s+i;
        }

        if(s==a) {b[j]=a;j++;}
    }
    t_e = clock();
    double t = (t_e-t_s)/CLOCKS_PER_SEC;
    printf("%d\n",b[--n]);
    printf("Time used:%fs\n",t);
    return 0;
}

我用上面的代码测试了程序运行时间,没什么问题啊~
你那个学校平台是怎么个情况?程序在我看来没什么大问题(可以再省略一部分循环次数的)。

1.
20000以内只有4个完全平方数。但是事先不知道。
所以数组b设大一点: b[10]

2.万一输入5,你的程序就出错了。要加个判断:

    if(n<=j) printf("%d\n",b[--n]);
    else printf("未找到。");

超出时间限制,如果有这问题的话,应该是你的程序运行时间太久了,
在判断的时候,

 for(i=1,s=0;i<=a/2;i++)
        {
            if(a%i==0) s=s+i;
        }

你试试

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐