李白喝酒问题

问题描述:

      

话说大诗人李白,一生好饮。幸好他从不开车。一天,他提着酒壶,从家里出来,酒壶中有酒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<stdio.h>
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次。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值