放蘋果問題

來源:互聯網
上載者:User

標籤:out   print   rgs   str   沒有   style   apple   reader   new   

1、放蘋果問題

問題描述:

把M個同樣的蘋果放在N個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的放法?(用K表示)注意:5,1,1和1,5,1是同一種分法。

輸入資料:

第一行是測試資料的數目t(0<=t<=20),以下每行均包含兩個整數M和N,以空格分開。1<=M,N<=10。

輸出要求:

對輸入的每組資料M和N,用一行輸出相應的K。

輸入範例:

1

7 3

輸出範例:8

2、代碼實現
 1 package com.wcy.october; 2  3 import java.util.Scanner; 4  5 /** 6  * 時間:2016年10月23日 7  * 問題描述:把M個同樣的蘋果放在N個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的放法?(用K表示)注意:5,1,1和1,5,1是同一種分法。 8  * 輸入資料:第一行是測試資料的數目t(0<=t<=20),以下每行均包含兩個整數M和N,以空格分開。1<=M,N<=10。 9  * 輸出要求:對輸入的每組資料M和N,用一行輸出相應的K。10  * 輸入範例11  * 112  * 7 313  * 輸出範例14  * 815  * 16  * 方法解析:17  * 1、所有不同的擺放方法可以分為兩類:至少有一個盤子空著和所有的盤子都不空。我們可以分別計算這兩類擺放方法的數目,然後把它們加起來。對於至少空著一個18  * 盤子的情況,則N個盤子擺放M個蘋果的擺放數目與N-1個盤子擺放M個蘋果的擺放方法數目相同。對於所有盤子都不空的情況,則N個盤子擺放M個蘋果的擺放方法19  * 數目等於N個盤子擺放M-N個蘋果的擺放方法數目。我們可以據此來用遞迴的方法求解這個問題。20  * 2、設f(m,n)為m個蘋果,n個盤子的放法數目,則先對n作討論,如果n>m,必定有n-m個盤子永遠空著,去掉它們對擺放蘋果放法數目不產生影響;21  * 即if(n>m)f(m,n)=f{m,m}。當n<=m時,不同的方法可以分為兩類:即有至少一個盤子空著或者所有盤子都有蘋果,前一種情況相當於22  * f(m,n)=f(m,n-1);後一種情況可以從每個盤子中拿掉一個蘋果,不影響不同放法的數目,即f(m,n)=f(m-n,n)。總的放蘋果的放法數目等於兩者23  * 的和,即f(m,n)=f(m,n-1)+ f(m-n,n)。整個遞迴流程說明如下:24  *  int f(int m,int n){25  *  if(n==1||m==0)return 1;26  *  if(n>m)return f(m,m);27  *  return f(m,n-1)+f(m-n,n)}28  * 3、出口條件說明:當n=1是,所有蘋果都必須放到一個盤子裡,所有返回1,當沒有蘋果可放時,定義為1种放法。遞迴的兩條路,第一條n會逐漸減少,終會達到29  * 出口n==1;第二條m會逐漸減少,因為n>m時,我們會return f(m,m)所以終會到達出口m==0.30  */31 public class Apple {32 33     /**34      * 求放置方法數目35      * @param m 蘋果數目36      * @param n 盤子數目37      * @return 放置方法數目38      */39     public int getResult(int m,int n){40         if (n == 1 || m == 0) {41             return 1;42         }else if (m < n) {43             return getResult(m, m);44         }else {45             return getResult(m, n-1) + getResult(m-n, n);46         }47     }48     49     /**50      * 使用者頁面測試51      * @param args52      */53     @SuppressWarnings("resource")54     public static void main(String[] args) {55         Apple apple = new Apple();56         Scanner reader = new Scanner(System.in);57         int number = reader.nextInt();58         int[] result = new int[number];59         int m = 0; // 蘋果數目60         int n = 0; // 盤子數目61         for (int i = 0; i < number; i++) {62             m = reader.nextInt();63             n = reader.nextInt();64             result[i] = apple.getResult(m, n);65         }66         67         for (int i = 0; i < result.length; i++) {68             System.out.println(result[i]);69         }70     }71 }

 

放蘋果問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.