贝蒂去超市买桔子,超市有n个桔子,每个桔子都有唯一的英文字母标号,贝蒂打算从所有桔子中挑选出若干个桔子买(也可能一个都不买),请编写程序帮助贝蒂求出所有可能的挑法。每种挑法按字典序给出各桔子的标号。
字典序,即字符串在字典中的顺序。对于两个字符串,从第一个字符开始比较,当某一个位置的字符不同时,该位置字符较小的串,字典序较小,例如abc比abd小。
输入格式:
输入为一个正整数n,表示超市里的桔子个数,n不超过15。桔子的标号为a, b, c, d…。若n=1,桔子为a;若n=3,桔子为a, b, c;若n=4,桔子为a, b, c, d;以此类推。
输出格式:
输出为若干行字符串,每行表示贝蒂的一种挑法。每种挑法用{}包含,每个桔子的标号用西文逗号间隔,例如{a,b,c},标号须按字典序排列。“什么也不买”对应的挑法最先输出,为{},中间无空格。
输入样例:
3
输出样例:
{} {a} {a,b} {a,b,c} {a,c} {b} {b,c} {c}
1 /* 2 *@Author: jingshenxiaohuo 3 *@Language: C++ 4 * __----~~~~~~~~~~~------___ 5 //////////////////////////////////////////////////////////////////// 6 // _ooOoo_ // 7 // o8888888o // 8 // 88" . "88 // 9 // (| ^_^ |) // 10 // O\ = /O // 11 // ____/`---'\____ // 12 // .' \\| |// `. // 13 // / \\||| : |||// \ // 14 // / _||||| -:- |||||- \ // 15 // | | \\\ - /// | | // 16 // | \_| ''\---/'' | | // 17 // \ .-\__ `-` ___/-. / // 18 // ___`. .' /--.--\ `. . ___ // 19 // ."" '< `.___\_<|>_/___.' >'"". // 20 // | | : `- \`.;`\ _ /`;.`/ - ` : | | // 21 // \ \ `-. \_ __\ /__ _/ .-` / / // 22 // ========`-.____`-.___\_____/___.-`____.-'======== // 23 // `=---=' // 24 // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // 25 // Buddha bless never bugs // 26 //////////////////////////////////////////////////////////////////// 27 */ 28 29 #include<iostream> 30 #include<algorithm> 31 #include<cstdio> 32 #include<cstring> 33 #include<cmath> 34 #include<map> 35 #include<vector> 36 #include<queue> 37 #include<set> 38 #define long long ll 43 using namespace std; 44 int a[15] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o'}; 45 int s[15]; 46 int t=0,n; 47 int print(){ 48 printf("{"); 49 for(int i=0;i<t-1;i++){ 50 printf("%c,",s[i]+97); 51 } printf("%c",s[t-1]+97); 52 printf("}\n"); 53 return 0; 54 } 55 int main(){ 56 cin>>n; 57 s[t++] = 0; 58 int tmp; 59 cout<<"{}"<<endl; 60 cout<<"{"<<"a"<<"}"<<endl; 61 while(t>0){ 62 tmp = s[t-1]; 63 if(tmp+1<n){ 64 s[t++] = tmp+1; 65 print(); 66 }else { 67 t--; 68 if(t>0){ 69 s[t-1] = s[t-1]+1; 70 print(); 71 } 72 } 73 } 74 75 return 0; 76 }