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

/*
原理:起点位置店和花都为0,酒为2。遇到一次店,酒*2。遇
到一次花,酒-1,当5次店和9次花都遇完,酒为1。递归终止条
件为:店和花超过题中所给或满足题目要求。
*/#include <stdio.h>int count = 0;void fun(int store, int flower, int alco)
{//先确定递归终止条件if (5 < store || 10 < flower)       {return ;}if (5 == store && 9 == flower){if (1 == alco){count++;}return ;}//终止条件结束fun(store + 1, flower, alco * 2);fun(store, flower + 1, alco - 1);
}int main()
{fun(0, 0, 2);           //初始情况:酒为2,其余为0printf ("共有 %d 种可能\n", count);return 0;
}

既然这题是填空题,那有没有直接点的办法?
当然有,用排列组合来求:
要求最后一次是花,那倒数第二次肯定也是花不然酒不可能变成1。那第13次结束酒应该有2。也就是说前13次里遇到了5次店和8次花,
酒从开始的2到最后的2,总共加了8又喝掉了8,5次加酒共加了8,8 = 1+1+2+2+2。即总共有C(5,2)=10种可能,
然而还少了加3的情况,即8 = 1+2+3+1+1,而加3只可能出现在酒从4喝到3再遇到店的时候,所以加3只可能出现在加2之后,
2和3是绑定的,有C(4,1)= 4种,所以总共有 C(5,2)+C(4,1)=14种情况。(文字叙述起来有点繁琐)

李洋疯狂C语言之用递归解决李白喝酒问题(附填空题解法)相关推荐

  1. 李洋疯狂C语言之用递归解决李白喝酒问题(二)

    之前用递归求出了多少种情况,如果要打印出所有的结果,就需要一个数组来存放可能的情况: /****************************************************** 题 ...

  2. 【C语言】利用递归解决猴子吃桃问题

    [C语言]利用递归解决猴子吃桃问题 参考文章: (1)[C语言]利用递归解决猴子吃桃问题 (2)https://www.cnblogs.com/ieybl/p/6597937.html 备忘一下.

  3. 李洋疯狂C语言之求素数的方法

    今天课上李洋老师讲到求素数时,讲了一种新的方法,一开始听得我一脸懵逼,但当我理解的时候,眼前一亮,老师的算法省去了不少步骤,话不多说,附上题目:求100到200之间的素数. 输入:无 计算: 求素数 ...

  4. 李洋疯狂C语言之合法帧

    题目: 输入一个字符串,同时输入帧头和帧尾(可以是多个字符),将该字符串中合法的帧识别出来. 提示:帧头和帧尾分别是head和tail 字符串"asdheadhauboisoktail&qu ...

  5. 李洋疯狂C语言之有关“you are come from shanghai”逆序(二)

    今天将指针和函数全部学完了,之前这题的做法,现在看来有点繁琐,于是乎做了一些修改,下面是新的代码 //you are from shanghai逆序#include <stdio.h> # ...

  6. 李洋疯狂C语言之将”you are come from shanghai ”倒置为”shanghai from come are you”,将句子中的单词位置倒置,而不改变单词内部结构

    题目: 编写一个C函数,将"you are come from shanghai "倒置为"shanghai from come are you",及将句子中的 ...

  7. 李洋疯狂C语言之n个人报数,报到3的退出,最后留在场上的是原来的第几位(约瑟夫环)

    今天老师布置了个题目,约瑟夫环,俗称猴子选大王.n个人报数,报到3的退出,最后留在场上的时原来的第几位 #include <stdio.h>int main() {int i, n, q, ...

  8. 李洋疯狂C语言之编程实现统计某年某月份的天数

    今天的题目:编程实现统计某年某月的天数 例如: 输入:2017.7 输出:31天 先附上我自己想的方法,由于几个功能放一起太繁琐,于是我想把他们分为三个函数,分别来实现这个功能: #include & ...

  9. 李洋疯狂C语言之break和continue的区别

    1.break (1) 只能在循环体内和switch语句体内使用break语句. (2) 当break出现在循环体中的switch语句体内时,其作用只是跳出该switch语句体. (3) 当break ...

最新文章

  1. Vue.js 组件 处理边界情况
  2. 捕获分组和非捕获分组以及命名分组
  3. python 完全面向对象_Python面向对象
  4. 《转》请放下你的无效社交
  5. EtherCAT 网站链接
  6. C++重载IO操作符
  7. Linux服务器中的wget、curl和scp
  8. 小猿圈分享-数据分析工具
  9. js实现视频时间段拖拽编辑
  10. 主表和附表的关联关系,普通字段就可以实现为什么还要有主键外键?之间有什么关系
  11. 收集五款常用的HTML编辑软件
  12. iis部署讲解和错误内容
  13. vue NavigationDuplicated: Avoided redundant navigation to current location
  14. MIDI通信协议(翻译)
  15. pandas 选取行和列的方法
  16. 【导数术】1.导数基本公式
  17. 二、staticMetaObject’ is not a member of **
  18. 关于css设置元素垂直水平居中的问题
  19. 爬取百度贴吧图片-python-requests
  20. MYSQLg高级-----SQL注入的理解(初级篇)以及如何防止注入

热门文章

  1. centos 6.5 apache mysql php_CentOS 6.5系统安装配置LAMP(Apache+PHP5+MySQL)服务器环境
  2. java和c++的区别大吗_小自考本科含金量高吗?小自考和大自考有什么区别?
  3. python os模块方法_python os模块方法总结
  4. 代码中 密码存储_你还记得浏览器自动存储的密码吗?用js代码恢复一下记忆吧...
  5. 定义一个dto对象_业务代码的救星——Java 对象转换框架 MapStruct 妙用
  6. netflow流量分析工具 linux,Centos5/Linux安装Nfdump和Nfsen图形界面分析netflow数据
  7. 事务没提交的数据查的出来吗?_“金三银四”面试官:说说事务的ACID,什么是脏读、幻读?...
  8. Ubuntu环境使用conda安装轻量级中文ocr开源项目chineseocr_lite,最简单的方式
  9. Java JUC工具类--Semaphore
  10. 能让你成为更优秀程序员的10个C语言资源