每日一題2

qq_51131591發表於2020-11-04

每日一題2

尋找1000內的完數
for迴圈中的變數與佛如迴圈外的變數再次搞混 導致輸出錯誤
完數:一個數剛好等於它所有因子之和。
基本思路很簡單 :for迴圈找到因子並存放陣列,且求總和;再判斷num與sum關係即可;
但此時應注意num和i的初始值且i與num大小關係,否則將無法進入for迴圈。i=2;num=1;
且a[n]為因子初始化為1;
以下兩個案例是sum初始化在for內和for外的區別,後者會導致程式出錯
因為每一次內層迴圈結束都應初始化因子 故sum和a[0]都應放入內層for迴圈裡

錯誤案例
#include<stdio.h>
int main(){
int a[256];

int i=0;
int k=0;
int num;
int sum=1;
a[0]=1;
for(num=2;num<1000;num++){
	
	for(i=2;i<=(num/2);i++){
		if(num%i==0){
			a[++k]=i;
			sum+=i;
		}
	}
	if(num==sum){
		printf("%d\n",num);
	}	
		
	
}
return 0;

}

正確案例
#include<stdio.h>
int main(){
int a[256];

int i=0;
int k=0;
int num;
int sum;

for(num=2;num<1000;num++){
	sum=a[0]=1;
	k=0;
	int n=0;
	
	for(i=2;i<=(num/2);i++){
		if(num%i==0){
			a[++k]=i;
			sum+=i;
		}
	}
	if(num==sum){
		printf("%d=%d",num,a[0]);
		for(n=1;n<=k;n++){
			printf("+%d",a[n]);
		}
		printf("\n");
	}	
		
	
}
return 0;

}

相關文章