回复 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;
}