題目連線
描述
將正整數n表示成一系列正整數之和:n=n1+n2+…+nk,輸入其中n1≥n2≥…≥nk≥1,k≥1。
正整數n的這種表示稱為正整數n的劃分。求正整數n的不
同劃分個數。
例如正整數6有如下11種不同的劃分:
6; 5+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。
第一行是測試資料的數目m(1<=m<=10)。以下每行均包含乙個整數n(1<=n<=10)。。輸出樣例輸入:1 6
輸出每組測試資料有多少種分法。樣例輸出:
首先利用好他給的(n1≥n2≥…≥nk≥1,k≥1。)這條件(提示)因為從小到大的順序進行的話是會有很複雜的麻煩的
而從大到小正好可以使用遞迴的方法(n範圍1-10,時間足夠)
後乙個數一定<=前乙個數
終止條件就是所有的數字之和=輸入的數字
遞迴至首數字為1
#include using namespace std;
int cnt; //全域性計數
int n;
/**遞迴函式fun(n,m)
n: 遞迴的首數字,eg從6,5,4...1
m: 前面推斷出的數字之和,是判斷終止的條件
*/void fun(int n,int m)else
if(add == n)
}}int main()
return
0;}
result
accepted
time
8msmemory
240language
g++
nyoj 90 整數劃分
整數劃分問題是演算法中的乙個經典命題之一,有關這個問題的講述在講解到遞迴時基本都將涉及。所謂整數劃分,是指把乙個正整數n寫成如下形式 n m1 m2 mi 其中mi為正整數,並且1 mi n 則為n的乙個劃分。如果中的最大值不超過m,即max m1,m2,mi m,則稱它屬於n的乙個m劃分。這裡我們...
NYOJ 90整數劃分
時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 將正整數n表示成一系列正整數之和 n n1 n2 nk,其中n1 n2 nk 1,k 1。正整數n的這種表示稱為正整數n的劃分。求正整數n的不 同劃分個數。例如正整數6有如下11種不同的劃分 6 5 1 4 2,4 1 1 3 ...
NYOJ 90 整數劃分
時間限制 3000 ms 記憶體限制 65535 kb 難度 3 輸入第一行是測試資料的數目m 1 m 10 以下每行均包含乙個整數n 1 n 10 輸出輸出每組測試資料有多少種分法。樣例輸入 1 6樣例輸出 11描述 將正整數n表示成一系列正整數之和 n n1 n2 nk,其中n1 n2 nk 1...