整数的分划问题。

版权声明:就是码字也不容易啊 https://blog.csdn.net/qq_40946921/article/details/84206157

整数的分划问题。 
如,对于正整数n=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+1 
现在的问题是,对于给定的正整数n,编写算法打印所有划分。
用户从键盘输入 n (范围1~10)

搜索算法1:

#include<iostream>
using namespace std;
int n, result[1000];
void print(int k) {
	for (int i = 1; i <= k; i++)
		cout << result[i] << " ";
	cout << endl;
}
void search(int k) {
	for (int i = n; i > 0 && n >= 0; i--) {
		if (i <= result[k - 1]) {
			result[k] = i;
			n -= i;
			if (n == 0)
				print(k);
			else
				search(k + 1);
			n += i;		//回溯一步
		}
	}
}
int main() {
	cin >> n;
	result[0] = n + 1;
	search(1);
	return 0;
}

搜索2:

#include<iostream>
using namespace std;
int n, result[1000], t;
void print(int k) {
	for (int i = 1; i <= k; i++)
		cout << result[i] << " ";
	cout << endl;
}
void search(int k, int sum) {
	for (int i = result[k - 1]; i > 0; i--) {
		if (i <= result[k - 1]) {
			result[k] = i;
			if (sum + i >= n) {
				if (sum + i == n)
					print(k);
			}
			else
				search(k + 1, sum + i);
		}
	}
}
int main() {
	cin>>n;
	result[0] = n + 1;
	search(1, 0);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_40946921/article/details/84206157