回复 10楼 炎天
得出结果的所用的时间……执行过程中似乎要比参考答案的迟了一点~嗯,或者我可以对比下递归次数~
[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
/** 2014年南桥杯竞赛第三题:李白打酒~ 标题:李白打酒 话说大诗人李白,一生好饮。幸好他从不开车。 一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱: 无事街上走,提壶去打酒。 逢店加一倍,遇花喝一斗。 这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。 请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。则:babaabbabbabbbb 就是合理的次序。像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目给出的)。 注意:通过浏览器提交答案。答案是个整数。不要书写任何多余的内容。 */ #include <stdio.h> #include <stdlib.h> int times=0; int func(int Add,int Drink,int Wine); int main() { int a=5; int b=8;/*已知最后一次遇到的是花,他正好把酒喝光了。而且倒数第二次遇到的肯定也不是店,而是花*/ printf("%d",func(a,b,2)); printf("\n递归次数[%d]",times); return 0; } int func(int Add,int Drink,int Wine) { ++times; int Plan; if(Add==0)//当遇酒家的机会Add用完,直接计算此时酒的存量Wine减去饮酒的机会Drink,是否等于两壶 if(Wine-Drink==2)return 1; else return 0; if(Drink==0)//当饮酒的机会用完,若 遇酒家的次数Add!=1,或者酒的存量Wine!=2 ,均可断定此方案不可行 if(Add==1&&Wine==1)return 1; else return 0; { //递归 Plan=func(Add-1,Drink,Wine*2); Plan+=func(Add,Drink-1,Wine-1); } return Plan; }