2023年第10期程式設計點將台

2021-04-03 02:24:44 字數 926 閱讀 8164

【題  目】

輸入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常用控制項和變數的命名規則 孫紹聰 推薦理由 因為現在有些同學寫的 一些控制項的命名有點不太專業,而命名是軟...