輸入m和n(20≥m≥n≥1)求出滿足以下方程式的正整數數列i1,i2,…,in,使得:i1+i2+…+in=m,且i1≥i2≥……≥in

功能:
  * 輸入m和n(20≥m≥n≥1)求出滿足以下方程式的正整數數列i1,i2,…,in,使得:i1+i2+…+in=m,且i1≥i2≥……≥in。
  * 原型: 當n=4,m=8時,將得到如下5個數列: 5 1 1 1 , 4 2 1 1 , 3 3 1 1 , 3 2 2 1 , 2 2 2 2
  * int GetSeriesNum(int m, int n); 輸入參數: int m:20≥m≥n≥1 int n:20≥m≥n≥1 返回值:
  * 滿足i1+i2+…+in=m,且i1≥i2≥……≥in條件的數列的數量

 

package com.caoliang.test;

import java.util.Arrays;
public class Test {
 int count = 0;
 int[] k = new int[20];
 public int getNumbles(int m, int n) {
  
  int i, j, d = 0;
  if ((m >= n) && (n > 0) && (m <= 20)) {
   if (n == 1) {
    System.out.println("m="+m);
    k[0] = m;
    System.out.println("========"+Arrays.toString(k));
    d = 0;
    for (j = 0; k[j]!=0; j++) {
     if (k[j + 1] > k[j]) {
      d = 1;
     }
    }
    if (d == 0) {
     count++;
    }
   } else{
    //每組數的最後一位數字肯定是小於等於m/n的,
    for (i = 1; i <= m / n; i++) {
     //給數組的最後一位賦值
     k[n - 1] = i;
     //由於遞歸,n-1的值在不停的減1,所以這個式子的結果是n=1開始計算
     getNumbles(m - i, n - 1);
     
    }
   }
    
  }else{
   return 0;
  }
  return count;
 }

 public static void main(String[] args) {
  Test test = new Test();
  int res1 = test.getNumbles(8, 4);
  // int res2 = test.getNumbles(6, 6);
  System.out.println("res1=" + res1);

 }
}



 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章