日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/19 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 李洋疯狂C语言之用递归解决李白喝酒问题(附填空题解法) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這是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语言之用递归解决李白喝酒问题(附填空题解法)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。