[C_GD16-中] 正整數分解
Time Limit: 2 seconds
問題描述 :
算出一個正整數遞減分解的方式,所謂正整數遞減分解是將一個正整數寫成幾個遞減數列的和。例如若給正整數6,則有下列遞減分解的方式:
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
因此共有11種遞減分解的方式。
輸入說明 :
輸入會包含多筆測資,每列有一筆測資,每筆測資最多有一個正整數n(20>n>1)。
輸出說明 :
請計算每筆測資輸入數遞減分解的方式數。
範例 :
問題描述 :
算出一個正整數遞減分解的方式,所謂正整數遞減分解是將一個正整數寫成幾個遞減數列的和。例如若給正整數6,則有下列遞減分解的方式:
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
因此共有11種遞減分解的方式。
輸入說明 :
輸入會包含多筆測資,每列有一筆測資,每筆測資最多有一個正整數n(20>n>1)。
輸出說明 :
請計算每筆測資輸入數遞減分解的方式數。
範例 :
輸入範例 | 輸出範例 |
6 5 | 11 7 |
- import java.util.*;
- import java.lang.*;
- import java.io.*;
- class Main
- {
- public static void main (String[] args)
- {
- // your code goes here
- Scanner sc = new Scanner(System.in);
- while(sc.hasNext())
- {
- int n = sc.nextInt();
- System.out.println(f(n, 1));
- }
- }
- private static int f(int n, int k)
- {
- if(n==k || n < 2*k)
- {
- return 1;
- }
- else
- {
- int num = 0;
- for(int i = k;i < n;i++)
- {
- if(n - i >= i)
- {
- num = num + f(n-i, i);
- }
- }
- return num + 1;
- }
- }
- }
如何解釋程式碼
回覆刪除