李白打酒
这道题跟去年还是前年的一个“奇怪的比赛”几乎一摸一样,详情:http://www.cnblogs.com/youdiankun/p/3594967.html
话说大诗人李白,一生好饮。幸好他从不开车。
一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱:
无事街上走,提壶去打酒。
逢店加一倍,遇花喝一斗。
这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。
请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。则:babaabbabbabbbb 就是合理的次序。像这样的答案一共有多少呢?请你计算出所有可能方案 的个数(包含题目给出的)。
注意:通过浏览器提交答案。答案是个整数。不要书写任何多余的内容。
1 #include<cstdio> 2 #include<string.h> 3 4 char a[20]; 5 int count; 6 7 int wine(char *a) 8 { 9 int i,s=2; 10 for(i=0;i<14;i++) 11 { 12 if(a[i]==1) 13 s*=2; 14 else 15 s-=1; 16 } 17 if(s==1)//当s=1时,是前14次。最后一次遇花,s-1=0,正好把酒喝光了 18 return 1; 19 else 20 return 0; 21 } 22 23 void show(char *a) 24 { 25 int i; 26 for(i=0;i<15;i++) 27 { 28 if(a[i]==1) 29 printf("a"); 30 else 31 printf("b"); 32 } 33 printf("\n"); 34 count++; 35 } 36 37 void sovle(char *a,int n,int shop,int flower) 38 { 39 if(n==14)//本来应是n==15(即a[i]从0~14,一共15次,遇店5次,遇花10次),可题目要求最后一次遇到的是花, 40 { //所以只看前14次(即0~13,n==14时就返回了) 41 if(shop==5 && flower==9) //这样就遇花9次(默认最后一次遇花,即a[14]=0) 42 { 43 if(wine(a)) 44 { 45 show(a); 46 } 47 } 48 return; 49 } 50 a[n]=1; 51 sovle(a,n+1,shop+1,flower);//a[n]=1时遇店 52 a[n]=0; 53 sovle(a,n+1,shop,flower+1);//a[n]=0时遇花 54 } 55 56 int main() 57 { 58 memset(a,0,sizeof(a)); 59 sovle(a,0,0,0); 60 printf("%d\n",count); 61 return 0; 62 }
来源:https://www.cnblogs.com/youdiankun/p/3621784.html