1. 程式人生 > >列印括號的所有組合

列印括號的所有組合

這是一道線上的趣味題:

列印括號實現一個演算法,列印所有可能的N對尖括號組合,用a代替“<”,用b代替“>”。輸入N,

輸出可能的括號組合:
例如
輸入:
2
輸出:
aabb
abab

(最後一行行尾換行符)輸入是從標準輸入讀取,輸出列印到標準輸出之中。

推薦指數:※※

來源:

這一道題,可以抽象層一個排列組合的問題,在排列過程中注意使用剩餘的右括號一定要多餘左括號的條件進行剪枝。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
using namespace std;
void print_bracket(int left,int right,int index,char *str,int len){
	if(left==0&&right==0){
		str[len]='\0';
		printf("%s\n",str);
	}
	else{
		if(left>=1){
			str[index]='a';
			print_bracket(left-1,right,index+1,str,len);
		}
		if(right>left){
			str[index]='b';
			print_bracket(left,right-1,index+1,str,len);
		}
	}
}
int main()
{
	int n;
	scanf("%d",&n);
	char *str=new char[n*2+1];
	str[0]='a';
	print_bracket(n-1,n,1,str,n+n);
	return 0;
}