李白喝酒问题

   “李白街上走,提壶去买酒,遇店加一倍,见花喝一斗”,途中,遇见5次店,见了10此花,壶中原有2斗酒,最后刚好喝完酒,要求最后遇见的是花,求可能的情况有多少种?

   分析:题目要求最后是遇见花也就是说最后是喝酒(最好刚好把酒完),出去这种确定的情况,最后剩下的情况是:还有一斗酒,前面遇到了5次店和九次花(打了5次酒,喝了九次酒)。

   然后每次情况只有两种分别是遇见花喝酒和遇到店打酒。

   //dfs(num-1,mum,s*2)+dfs(num,mum-1,s-1);

   遇到店的时候打酒(s*2),然后酒的斗数会翻倍;遇到花时喝酒,然后酒的斗数减一(s-1);

   然后设置递归的出口:

   当酒喝完还遇见花时,则return 0;以为酒不能是负的;

   当5个店已经都遇见过时,则return 0;

   当9个花已经都遇见过时,则return 0;

   当花刚好遇见完,店刚好遇见完,酒还有一斗时:return 1;

   当中间过程,酒喝完了,但是遇见店了,又因为此时s=0,遇到店的时候打酒(s*2),所以要把s设置成0.5;

  /***********只是个人理解,欢迎交流*************/

  

 1 #include<stdio.h>
 2 int dfs(int num,int mum,int s){
 3     if(s<0 || num<0 || mum<0)
 4     return 0;
 5     if(num<0 || mum<0)
 6     return 0;
 7     if(num==0 && mum==0&& s==1)
 8     return 1;
 9     if(s==0 && num>0 && mum>=0)
10     s=0.5;
11     return dfs(num-1,mum,s*2)+dfs(num,mum-1,s-1);
12 }
13 int main()
14 {
15     printf("%d",dfs(5,9,2));
16     return 0;
17  } 

 

    

内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!

相关课程