每日编程一小时(第十三天)
一.问题描述
话说大诗人李白,一生好饮。幸好他从不开车。一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱:
无事街上走,提壶去打酒。
逢店加一倍,遇花喝一斗。
这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。
请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。则:babaabbabbabbbb就是合理的次序。
像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目给出的)
二.设计思路
1.设置打酒次数shop=0,看花次数flower=0,酒wine=9,全局变量a=0
2.设计递归函数可知最后一次必是遇到花,所以当shop>5,或者flower>9时都是不符合条件的,
当shop==5&flower==9时,当wine==1时,符合条件,这时使i++
3.递归调用函数参数分别为:shop+1,flower,wine*2和shop,flower+1,wine-1直到结束
4.最后a的值就是总次数
三.流程图

四.代码实现
#include <iostream> using namespace std; int a = 0; void f(int shop, int flower, int wine) { if (shop > 5 || flower > 9) return; if (shop == 5 && flower == 9) { if (wine == 1) { a++; return; } } f(shop, flower + 1, wine - 1); f(shop + 1, flower, wine * 2); } int main() { f(0, 0, 2); cout << a; return 0; }

浙公网安备 33010602011771号