完数VS盈数
程序员文章站
2024-03-21 20:17:04
...
题目描述
一个数如果恰好等于它的各因子(该数本身除外)子和,如:6=3+2+1。则称其为“完数”;若因子之和大于该数,则称其为“盈数”。 求出2到60之间所有“完数”和“盈数”。
输入描述:
题目没有任何输入。
输出描述:
输出2到60之间所有“完数”和“盈数”,并以如下形式输出: E: e1 e2 e3 ......(ei为完数) G: g1 g2 g3 ......(gi为盈数) 其中两个数之间要有空格,行尾不加空格。
示例1
输入
输出
这道题目我很无语,我写的代码运行可能通过在牛客上就是通过不了,我看了别人的分析,和我写的差不多,不知道哪里出的问题。如果有看出来的,麻烦提醒一下,感谢。
我的代码:
#include<stdio.h>
int main(){
int i,j;
int a[60];
int b[60];
int m=0,n=0;
for(i=2;i<=60;i++){
int sum=0;
for(j=1;j<i;j++){
if(i%j==0)
sum=sum+j;
}
if(sum>i){
a[m]=i;
m++;
}
else if(sum==i){
b[n]=i;
n++;
}
}
printf("E:");
for(i=0;i<n;i++){
printf("%d ",b[i]);
}
printf("\nG:");
for(i=0;i<m;i++){
printf("%d ",a[i]);
}
return 0;
}
上面的代码不能ac,但是我找不到原因。
下面是能够ac的代码:
#include <stdio.h>
int main(int argc, const char *argv[])
{
int e[60], g[60];
int e_size = 0, g_size = 0;
int i, j, sum;
for (i=2; i<=60; i++)
{
sum = 0;
for(j=1; j<i; j++)
{
if (i%j == 0)
sum += j;
}
if (sum > i)
g[g_size++] = i;
else if (sum == i)
e[e_size++] = i;
}
printf("E:");
for(i=0; i<e_size; i++)
printf(" %d", e[i]);
printf("\nG:");
for(i=0; i<g_size; i++)
printf(" %d", g[i]);
return 0;
}
当然还有陈独秀的代码
#include<stdio.h>
int main(){
printf("E: 6 28\nG: 12 18 20 24 30 36 40 42 48 54 56 60");
}
上一篇: MySQL复制一个数据库
下一篇: 1