簡單的整數劃分問題(北大MOOC程序設計與算法二 第三週測驗題)

簡單的整數劃分問題

將正整數n 表示成一系列正整數之和,n=n1+n2+…+nk, 其中n1>=n2>=…>=nk>=1 ,k>=1 。
正整數n 的這種表示稱爲正整數n 的劃分。正整數n 的不同的劃分個數稱爲正整數n 的劃分數。

輸入

標準的輸入包含若干組測試數據。每組測試數據是一個整數N(0 < N <= 50)。

輸出

對於每組測試數據,輸出N的劃分數。

輸入樣例

5

輸出樣例

7

實現代碼

#include<iostream>
using namespace std;
int f(int a,int p){
	if(a<p)
		return f(a,a);
	if(a==0)
		return 1;
	if(p==0)
		return 0;
	return f(a,p-1)+f(a-p,p);
	
}
int main()
{
	int n;
	while(cin>>n){
		cout<<f(n,n)<<endl;
	}
	return 0;
}

這題其實和“放蘋果”是一樣的問題。唯一不同就是本題“蘋果”數 = “盤子”數。所以思路完全相同。

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