更多精彩文章請關注公眾號『大海的BLOG』
問題
話說大詩人李白,一生好飲,幸好他從不開車,
一天,他提著酒壺,從家里出來,酒壺中有酒兩斗,他邊走邊唱:
無事街上走,提壺去打酒,
逢店加一倍,遇花喝一斗,
這一路上,他一共遇到店 5 次,遇到花 10 次,已知最后一次遇到的是花,他正好把酒喝光了,請你計算李白遇到店和花的次序,有多少種可能的方案,
思路
我們已知遇店 5 次,遇花 10 次,并且最后一次遇到花,正好把酒喝光,那么我們可以把店作為二進制中的 1,把花作為二進制中的 0,因為已經確定最后一次遇到的是花,所以我們需要判斷列舉的結果是否剛好有 5個 1 和 9個 0,那么我們就列舉出 14 位二進制的所有可能并加以判斷即可,判斷思路為判斷二進制是否有 9 個 0,5個 1,并且最終酒剛好剩 1 斗
實作代碼(C)
#include<stdio.h>
int main()
{
int ans=0;//方案數
for (int i=0; i<(1<<14); i++)
{
int dian=0;//表示遇到店的次數
int hua=0;//表示遇到話的次數
int num=2;//初始酒壺有兩斗
for (int j=0;j<14 ;j++)
{
if (i&(1<<j)) //這里判斷二進制i從右數第j+1為是否為1
{
dian++;//遇到店,次數加1
num*=2;//加一倍
}
else
{
hua++;//遇到花,次數加1
num-=1;//喝一斗
}
}
if (dian==5&&hua==9&&num==1)
{
++ans;//記錄方法數
}
}
printf("%d\n",ans);
}
更多精彩文章請關注公眾號『大海的BLOG』
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/36279.html
標籤:C
上一篇:Warshall關系傳遞閉包
下一篇:Dev-C++回文數遇到的小麻煩

