簡單的整數劃分

2021-10-07 19:52:24 字數 1130 閱讀 1736

本題思路和**

1.純遞迴

設函式func(int n, int m) 定義為計算 把整數 n 劃分為 小於或等於 m 的一系列數字之和 的劃分方法有多少種,則對於:

(1)當 n == 1 時,無論 m 取何值,都只能 劃分為 1;

(2)當 m == 1 時 ,無論 n 為何值, 也只能劃分為 n 個 1 相加 ,只有一種劃分方法;

(3)當 n < m, 顯然 func(n, m) = func(n , n);

(4)當 n > m 時, 可分兩種情況討論,

(1)劃分中包含 m 時, 有func(n -m, m) 種劃分方法;

(2)劃分中不包含 m 時, 有 func(n, m-1)種劃分方法;

所以 func(n ,m) = func(n -m, m) + func(n, m-1);

(5)當 n == m 時,當劃分包含 m 時, m = m ,只有一種劃分方法;

當 不包含 m 時, 有 func(n, m-1) 種劃分方法。

根據以上分析:

func( n, n ) = 1, 當 n ==1;

func( n, n ) = 1, 當m == 1;

func( n, n ) = func( n,n ) , 當n < m;

func( n, n ) = func( n, m-1) +1 , 當n == m;

func( n, n ) = func ( n - m, m ) + func ( n , m -1) , 當n > m;

相應的**如下:

/*

* 1.cpp

* * created on: 2023年9月01日

* author: administrator

*/#include

using

namespace std;

intfunc

(int n,

int m)

else

if(n < m)

else

if(n == m)

else

if(n >= m)

}int

main()

return0;

}

簡單的整數劃分問題

總時間限制 100ms 記憶體限制 65536kb 描述 將正整數n 表示成一系列正整數之和,n n1 n2 nk,其中n1 n2 nk 1 k 1 正整數n 的這種表示稱為正整數n 的劃分。正整數n 的不同的劃分個數稱為正整數n 的劃分數。輸入標準的輸入包含若干組測試資料。每組測試資料是乙個整數n...

簡單整數劃分問題

1.純遞迴 設函式func int n,int m 定義為計算 把整數 n 劃分為 小於或等於 m 的一系列數字之和 的劃分方法有多少種,則對於 1 當 n 1 時,無論 m 取何值,都只能 劃分為 1 2 當 m 1 時 無論 n 為何值,也只能劃分為 n 個 1 相加 只有一種劃分方法 3 當 ...

openjudge 簡單的整數劃分問題

100ms 記憶體限制 65536kb 描述 將正整數n 表示成一系列正整數之和,n n1 n2 nk,其中n1 n2 nk 1 k 1 正整數n 的這種表示稱為正整數n 的劃分。正整數n 的不同的劃分個數稱為正整數n 的劃分數。輸入標準的輸入包含若干組測試資料。每組測試資料是乙個整數n 0 n 5...