【编程实现】(给原题做了一番改动,感觉这样更有意思。)
循环以及循环的嵌套,是同学们编写程序时常见的操作。如果用一对括号来代表一个循环的话,那么三个循环出现的合法组合有5种,分别为:“{}{}{} ”、“{{{}}}”、“{{}{}}”、“{{}}{}”、“{}{{}}”。
输入:一个数字n(1<=n<=10),代表循环的个数。
输出:输出n个循环的合法组及组合个数。
【评判标准】
3分:能正确输出一组数据;
5分:能正确输出两组数据;
7分:能正确输出三组数据;
9分:能正确输出四组数据;
11分:能正确输出五组数据。
样例输入1:
2
样例输出1:
{}{}
{{}}
2
样例输入2:
3
样例输出2:
{}{}{}
{{}}{}
{}{{}}
{{}{}}
{{{}}}
5
1. #include <stdio.h> 2. #include <iostream> 3. using namespace std; 4. int n,lf,rt,s,tj,tmp; 5. int aa[65]; 6. int main(int argc, char *argv[]) 7. { 8. scanf("%d",&n); 9. int m=1,t=1,a=0,b=0; 10. tj=0; 11. for(int i=1;i<=2*n;i++){ 12. if(i%2==0)a+=t; 13. if(i>n)b+=t; 14. t*=2; 15. } 16. // cout<<a<<" "<<b<<endl; 17. for(int j=a;j<=b;j++){ 18. t=j; 19. lf=rt=0;s=1; 20. memset(aa,0,sizeof(aa)); 21. while(t>0){ 22. if(t&1){lf++;aa[s]=1;} 23. else {rt++;aa[s]=0;} 24. if(lf>rt)break; 25. s++; 26. t=t>>1; 27. } 28. if(aa[1]==0&&lf==rt&&lf==n){ 29. tj++; 30. for(int i=1;i<s;i++){ 31. if(aa[i]==0) printf("{"); 32. else printf("}"); 33. } 34. printf("\n"); 35. } 36. } 37. printf("%d\n",tj); 38. return 0; 39. }