洛谷 P1157 组合输出 题解

P1157 组合的输出

#include
#include

using namespace std;

int n, r;
int a[21];
void Print(int x, int count)
{
	if(x > n){
		return;
	}
	a[count] = x;
	count++;
	for(int i = x+1; i <= n-r+count+1; i++){
		if(count == r){
			for(int j = 0; j < r; j++){
				cout << setw(3) << a[j];
			}
			cout << '\n';
			return;
		}
		else
			Print(i, count);
	}
}
int main()
{
	cin >> n >> r;
	for(int i = 1; i <= n-r+1; i++){
		Print(i,0);
	}
	
	return 0;
 } 

这题属于暴力枚举,要求每组输出要占3位.
如果直接用递归输出,会出现数据不全的情况。为了解决这个问题,我本来想用数据结构:队列。后面想想不用那么复制,只需提前准备一个数组来存储,存到长度为r时,输出。回溯。

你可能感兴趣的:(练习)