1. 程式人生 > >分數拆分 C語言實現

分數拆分 C語言實現

分數拆分

輸入正整數k,找到所有的正整數x>=y,使得1/k=1/x + 1/y; 

樣例輸入: 

12 
樣例輸出: 

1/2 = 1/6 + 1/3 
1/2 = 1/4 + 1/4 

1/12 = 1/156 + 1/13 
1/12 = 1/84 + 1/14 
1/12 = 1/60 + 1/15 
1/12 = 1/48 + 1/16 
1/12 = 1/36 + 1/18 
1/12 = 1/30 + 1/20 
1/12 = 1/28 + 1/21 

1/12 = 1/24 + 1/24 

分析:

經典的列舉題,暴力列舉不用太用腦,但對問題進行一定的分析往往會讓演算法更清晰、高效。

由 x >= y , 1/k=1/x+1/y 可以推匯出  x >= 2k >= y

且 y  >= 1 
所以我們迴圈 y
因為y有限,x則根據 y 和 k 求得,但需要注意除數不能為0且x >= 2k 

程式碼在此:

#include<stdio.h>

/*
由 x >= y , 1/k=1/x+1/y 可以推匯出  x >= 2k >= y

y >= 1 
所以我們迴圈 y 因為y有限,x則根據 y 和 k 求得,但需要注意除數不能為0且x >= 2k 
*/
int main () {
	
	int k;
	int i, j;
	
//	scanf("%d", &k);
	k = 12;
	double count = 1.0 / k;
	
	double x;
	for(i = 1; i <= 2 * k; i ++){
		double temp = (count - 1.0 / i);
		
		if(temp == 0)
			continue;
			
		x = 1 / temp;
		
		if(x >= 2 * k)
			printf("1/%d=1/%.0lf+1/%d\n", k, x, i);
	}  
	
	return 0;
}