當前位置:編程學習大全網 - 編程軟體 - C++分數拆分

C++分數拆分

/*

1/k=1/m+1/n,2<=k<=30000,要輸出所有的情況。

例如1/2=1/4+1/4;1/2=1/3+1/6。

求完整代碼,或者M的最大值。用freopen的文件輸入。scanf,printf輸入輸出。

數學分析。

1) 我們假設 m <= n ,因為 k 必然小於 m 和 n ,則有 k < m <= n

2) 1/k=1/m+1/n 轉換為 n 的等式,為 n = km/(m-k)

3) k 為輸入,是已知數。我們要枚舉 m 來獲得 n 。

因為 k < m <= n ,也就是 k < m <= km/(m-k) ,解得 k < m <= 2k 。

4) 因此我們程序要做的就是:

枚舉 m 的值為 [k+1,2k] 的壹個整數,n = km/(m-k)

看是否能得到整數解 n

*/

#include <stdio.h>

int main(int argc, char *argv[])

{

int k,m,n;

// 重定向輸入流

freopen("data.txt","r",stdin);

while(scanf("%d",&k)!=EOF)

{

for(m=k+1;m<=2*k;m++)

{

// 判斷 km/(m-k) 是整數

if(k*m%(m-k) == 0)

{

n = k*m/(m-k);

printf("1/%d = 1/%d + 1/%d\n",k,m,n);

}

}

}

return 0;

}

  • 上一篇:對卡特彼勒電機編程
  • 下一篇:tony robbins是誰
  • copyright 2024編程學習大全網