原题链接:[编程入门]完数的判断
解题思路:
使用两层for循环,第一层for循环用来遍历1-n的所有数,这些数定义为num;第二层for循环用于找出num的所有因子(除num本身),遍历从1到num-1的所有数,用i表示。
sum用于累加这些因子,最后和num进行比较。
所有的因子需要存储在一个类似数列的结构里,用数组即可。但由于数组的长度不好判断,所以我这里给出了一个比较大的值。
注意事项:
记得把用于计算和的sum以及数组下标j重新定义为0,否则会遗留上一次循环的值而出错
在最后遍历输出数组元素的时候,for循环里用于遍历的下标是从0到j-1,而不是到j,因为在第二层for循环结束的时候,j多加了1
参考代码:
#include <stdio.h>
int main()
{
int n,num,i,j,sum;
int a[99999]; //定义了一个元素个数很多的数组
scanf("%d",&n);
for(num=1;num<=n;num++) //第一层for循环用于遍历1-n所有数
{
int sum = 0,j=0; //记得把用于计算和的sum以及数组下标j重新定义为0,否则会遗留上一次循环的值而出错
for(i=1,j=0;i<num;i++) //第二层for循环,用于找出num的因子
{
if(num%i == 0)
{
a[j++] = i; //j++,为下一次循环做准备(j++让j的值+1,但它本身的值还是原来j的值,并没有+1)
sum += i;
}
}
if(sum == num) //判断是否为完数
{
printf("%d its factors are ",num);
for(i=0;i<=j-1;i++) //使用for循环遍历数组并输出数组的元素(注意这里的下标是从0到j-1,而不是到j,因为在第二层for循环结束的时候,j多加了1)
{
printf("%d ",a[i]);
}
printf("\n");
}
}
return 0;
}0.0分
11 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
#include <stdio.h> int main(){ int N; scanf("%d",&N); int number[N]; int i,j,sum=0; for(i=0;i<N;i++){ number[i]=i+4; sum=0; for(j=1;j<number[i];j++){ if(number[i]%j==0){ sum+=j; if(number[i]==sum){ printf("%d\n",number[i]); } } } } return 0; } 各位大佬,能不能帮忙看看,当我键入N=1000的时候,会多一个24出来,其他的结果和题目给的例子是符合的,想知道是哪里出了问题#include<stdio.h> int main() { int n,i,a[n],j,k=0,s=0; double t=j/2.0; scanf("%d",&n); for(j=1;j<=n;j++) { for(i=1;i<=t;i++) {if(j%i==0) { a[k]=i; s=s+a[k]; k++;} } if(s==j) printf("%d its factors are ",j); for(k=0;k<=t;k++) printf("%d ",a[k]); } return 0; } 请问一下,我哪里错了,谢谢