【題 目】
輸入m和n(20>=m>=n>0),請程式設計求出滿足以下方程的正整數數列i1,i2,....,in,
使得:i1+i2+....+in=m,且i1>=i2>=....>=in.
【演算法分析】
首先,我們可以判斷這是乙個整數劃分問題.
在正整數n的所有不同劃分中,將最大加數n1不大於m的劃分個數記作q(n,m).建立如下遞迴關係:
(1)q(n,1)=1,n>=1;
當最大加數n1不大於1時,任何正整數n只有一種劃分形式,即n等於n個1相加。
(2)q(n,m)=q(n,n),m>=n;
最大加數n1實際上不能大於n。因此,q(1,m)=1。
(3)q(n,n)=1+q(n,n-1);
正整數n的劃分由n1=n的劃分和n1<=n=1的劃分組成。
(4)q(n,m)=q(n,m-1)+q(n-m,m),n>m>1;
正整數n的最大加數n1不大於m的劃分由n1=m的劃分和n1<=m-1的劃分組成。
結合該演算法,分別輸出i1,i2,i3,....in即可求出符合條件的數列。
【開發工具和語言】
visual c++ 6.0
【源 程 序】
#include "iostream.h"
#include "iomanip.h"
#define max 1024
int k;
void display(int *array ,int len)
else if(m==0&&n==1)
else if(m==1&&n>1)
else if(m>m;
coutif(m20||n<0||n>20){
cout<
《HelloGitHub月刊》第10期
這一年感謝大家的支援,小弟這裡給大家拜年了!最後,祝願大家 雞年大吉 興趣是最好的老師,hellogithub 就是幫你找到興趣!最開始我只是想把自己在瀏覽 github 過程中,發現的有意思 高質量 容易上手的專案收集起來,這樣便於以後查詢和學習。後來一想,如果給這些 github 專案都加上簡單...
《HelloGitHub月刊》第10期
這一年感謝大家的支援,小弟這裡給大家拜年了!最後,祝願大家 雞年大吉 興趣是最好的老師,hellogithub 就是幫你找到興趣!最開始我只是想把自己在瀏覽 github 過程中,發現的有意思 高質量 容易上手的專案收集起來,這樣便於以後查詢和學習。後來一想,如果給這些 github 專案都加上簡單...
第14期《成長之路》2023年10月刊
1.磨耳朵 的英語時光 翟倩 推薦理由 現在的英語學習處於沉默期,那麼沉默期的英語聽力又又什麼技巧呢。這篇部落格,結合個人經驗,總結了一些英語聽力的小方法。幫助大家的英語聽力越來越好。2.vb常用控制項和變數的命名規則 孫紹聰 推薦理由 因為現在有些同學寫的 一些控制項的命名有點不太專業,而命名是軟...