分數拆分 C語言實現
阿新 • • 發佈:2019-02-03
分數拆分
輸入正整數k,找到所有的正整數x>=y,使得1/k=1/x + 1/y;
樣例輸入:2
12
樣例輸出:
2
1/2 = 1/6 + 1/3
1/2 = 1/4 + 1/4
8
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 (因為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; }