整數劃分問題java實現

2021-08-08 11:30:56 字數 757 閱讀 4232

public class integerdivision 

/*** 將n劃分為最大整數不超過m的組合

* @param n要劃分的整數

* @param m

* @return可能的組合個數

*/public static int q(int n,int m)

//不超過0的組合個數為0或者0不能被劃分

if(n<=0||m<=0)

//不超過m(m>n)事實上等價於不超過n本身

if(m>n)

//不超過n的組合可以分為等於n(只有1種)和不超過n-1的組合

if(m==n)

//n>m>0的情況,可以分為不超過m-1的組合以及最大整數剛好等於m的組合(等價於將n-m劃分為最大整數不超過m的個數)

return q(n,m-1)+q(n-m,m);

}}

例如將6劃分為最大整數不超過6的情況
1)6=6+0
2)6=5+1
3)6=4+2 6=4+1+1
4)6=3+3  6=3+2+1  6=3+1+1+1
5)6=2+2+2   6=2+2+1+1  6=2+1+1+1+1
6)6=1+1+1+1+1+1

整數劃分問題

整數劃分問題是乙個經典問題,幾乎在講演算法設計的書中都會講,下面把主要的思想給總結下。所謂整數劃分,就是將乙個正整數n劃分為一系列的正整數之和,如將n可以劃分為 1 我們該如何找出所有的劃分呢?我們可以先來看看整數劃分的規律 譬如正整數 6 劃分情況如下 6 5 14 2 4 1 1 3 3 3 2...

整數劃分問題

給定乙個自然數,分成k部分,a1,a2.的數的和,要求a1 a2.求有多少種?原理 整數n拆分成最多不超過m個數的和的拆分數,和n 拆分成最大不超過m的拆分數相等。根據這個原理,原問題就轉化成了求最大拆分為k的拆分個數與最大拆分為k 1的拆分個數的差 f n,k f n,k 1 f n k,k 如下...

整數劃分問題

首先是遞迴解法 整數劃分問題是將乙個正整數n拆成一組數連加並等於n的形式,且這組數中的最大加數不大於n。如6的整數劃分為 65 1 4 2,4 1 1 3 3,3 2 1,3 1 1 1 2 2 2,2 2 1 1,2 1 1 1 1 1 1 1 1 1 1 共11種。下面介紹一種通過遞迴方法得到乙...