解题思路: 求解的过程并不难,主要的问题在于如何提高速度。遍历求解,约数缩小范围,约数排序
注意事项: 每一次求得的一对约数中的最大值可以作为下一次遍历的阈值
参考代码:
#include <stdio.h>
#include <string.h>
void sort(int iarry[],int cnt);
int main()
{
int i,N,icnt,j,k,Sn=0,Sum=0;
int subcnt=0,Subtmp[100];
scanf("%d",&N);
for(i=1;i<=N;i++)
{
icnt=i;
for(j=1;j<icnt;j++)
{
if( (i%j==0) && (i!=j) )
{
k=i/j;//得到k、j两个约数
if(i==k)//排除本身约数k
{
Sn=j;
Subtmp[subcnt++]=j;
}
else //存储两个约数j、k
{
Sn=j+k;
Subtmp[subcnt++]=j;
Subtmp[subcnt++]=k;
}
Sum=Sum+Sn;//求约数之和
icnt=k;//缩小计算范围
}
}
if(i==Sum)
{
printf("%d its factors are ",i);
sort(Subtmp,subcnt);//约数数组排序打印
}
Sum=Sn=subcnt=0;
}
return 0;
}
//数组排序
void sort(int iarry[],int Len)
{
int i,j,tmp,cnt;
cnt=Len;
for(i=0;i<cnt;i++)
{
for(j=i+1;j<cnt;j++)
{
if(iarry[i]>iarry[j])
{
tmp=iarry[i];
iarry[i]=iarry[j];
iarry[j]=tmp;
}
}
printf("%d ",iarry[i]);
}
printf("\n");
}
0.0分
0 人评分
程序员的表白 (C语言代码)浏览:706 |
C语言程序设计教程(第三版)课后习题7.3 (C语言代码)浏览:1215 |
【简单计算】 (C语言代码)浏览:642 |
2006年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:503 |
母牛的故事 (C语言代码)浏览:1451 |
C语言程序设计教程(第三版)课后习题9.1 (C语言代码)浏览:710 |
2^k进制数 (C语言描述,蓝桥杯)浏览:1457 |
C二级辅导-公约公倍 (C语言代码)浏览:537 |
用筛法求之N内的素数。 (C语言代码)浏览:595 |
敲七 (C语言代码)浏览:2748 |