这是一道在线的趣味题:
打印括号实现一个算法,打印所有可能的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;
}