話說大詩人李白,一生好飲。幸好他從不開車。
一天,他提著酒壺,從家里出來,酒壺中有酒兩斗。他邊走邊唱:
無事街上走,提壺去打酒。逢店加一倍,遇花喝一斗。這一路上,他一共遇到店 55 次,遇到花 10
10 次,已知最后一次遇到的是花,他正好把酒喝光了。請你計(jì)算李白遇到店和花的次序,有多少種可能的方案。
這個(gè)題目解法很多,二進(jìn)制枚舉是一種寫起來非常簡潔的解法。我們已知遇店 55 次,遇花 1010 次,并且最后一次遇到花,正好把酒喝光。那么我們可以把店作為二進(jìn)制中的 11,把花作為二進(jìn)制中的 00,因?yàn)橐呀?jīng)確定最后一次遇到的是花,所以我們需要判斷枚舉的結(jié)果是否剛好有 55 個(gè) 11 和 99 個(gè) 00。那么我們就枚舉出 1414 位二進(jìn)制的所有可能并加以判斷即可,判斷思路為判斷二進(jìn)制是否有 99 個(gè) 00,55 個(gè) 11,并且最終酒剛好剩 11 斗。
附上代碼
#include <cstdio>#include <algorithm>using namespace std;int main(){ int value = 0; for(int i = 0;i < (1<<14);i ++){ int total1 = 0; int total2 = 0; int num = 2; for(int j = 0;j < 14;j ++){ if(i&(1<<j)){//判斷j位是否為1 total1 ++; num *= 2; }else{ total2 ++; num -= 1; } } if(total1 == 5&&total2 == 9&&num == 1){ value ++; } } PRintf("%d/n",value); return 0;}本文章來自計(jì)蒜客。
新聞熱點(diǎn)
疑難解答