题目描述
任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。
当n=7共14种拆分方法:
7=1+1+1+1+1+1+1
7=1+1+1+1+1+2
7=1+1+1+1+3
7=1+1+1+2+2
7=1+1+1+4
7=1+1+2+3
7=1+1+5
7=1+2+2+2
7=1+2+4
7=1+3+3
7=1+6
7=2+2+3
7=2+5
7=3+4
total=14
输入
输入一个待拆分的整数N(N<=8)。
输出
输出各种拆分的方案。
样例输入
样例输出
题解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| #include <iostream> using namespace std; int n; int a[100000] = { 1 }; //输入的数的值的范围未给出,应该开大一些,但对于较大数据的测试,这种方法就有些不好了; void print(int t) { if (t == 1) { return; } for (int i = 1; i < t; i++) { cout << a[i] << "+"; } cout << a[t] << endl; } int search(int t, int s) { for (int i = 1; i <= s; i++) { if (a[t - 1] <= i) { a[t] = i; t++; s = s - i; if (s == 0) { print(t - 1); } else { search(t, s); } s = s + i; t--; } } } int main() { cin >> n; search(1, n); return 0; }
|