频道栏目
首页 > 程序开发 > 软件开发 > 其他 > 正文
李白喝酒问题
2017-03-29 09:14:11           
收藏   我要投稿

李白喝酒问题:话说大诗人李白,一生好饮。幸好他从不开车。一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱。

无事街上走,提壶去打酒。

逢店加一倍,遇花喝一斗。

这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。

请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。则:babaabbabbabbbb就是合理的次序。

像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目给出的)。

问题分析:

一、首先按照题干我们可以分两种情况讨论:

1:下一次遇到店;

2:下一次遇到花。

二、借助变量分析问题:

声明变量:

int store //店

int flower //花

int alcho //酒

int next //该变量只有 0、1两个值,0表示下次遇到店,1表示遇到花

所以遇到店该执行的操作为:

storer--;

alcho = alcho*2;

遇到花的操作为:

flower--;

alcho--;

满足条件的情况为:

store==0&&flower==0&&alcho==0&&next==1

注意:因为题目要求最后一次遇到的是花,所以next==1。

代码实现:

#include

int count = 0;

void trap(int store,int flower,int alcho,int next){

if(next == 0){//下次遇到花

if(store > 0){

store--;

alcho = 2 * alcho;

}

else return;

}

else{//下次遇到店

if(flower > 0){

flower--;

alcho--;

}

else return;

}

if(store==0&&flower==0&&alcho==0&&next==1){

count++;

return;

}

trap(store,flower,alcho,1);//下次遇到花

trap(store,flower,alcho,0);//下次遇到店

}

int main(void){

trap(5,10,2,0);//下次遇到花

trap(5,10,2,1);//下次遇到店

printf("%d\n",count);

return 0;

}

结果:14次。
点击复制链接 与好友分享!回本站首页
上一篇:结绳
下一篇:快速排序
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站