一共有多少种情况?
初始为2,遇到店乘以2,遇到花减1
最后一次遇到的是花,前面十四次遇到店4次,遇到花9次。且十四次后酒剩一斗。
二进制枚举:
用1表示店,0表示花,那么这个过程可以用一个14位二进制数可以表示。
for(int i=0;i<(1<<14);i++){
for(int j=0;j<14;j++){
if(i&(1<<j)){
//判断第j位是否为1
}
}
}
代码:
#include<iostream>
#include<cstring>
using namespace std;
int bit[15];
bool check(){
int n=2;
int cnt_f=0;
int cnt_d=0;
for(int i=0;i<14;i++){
if(bit[i]==0){
n--;
cnt_f++;
if(n<0)return false;
if(cnt_f>9)return false;
}
else{
n*=2;
cnt_d++;
if(cnt_d>5)return false;
}
}
return n==1&&cnt_d==5&&cnt_f==9;
}
int main(){
int n=2;
int res=0;
for(int i=0;i<(1<<14);i++){
memset(bit,0,sizeof(bit));
for(int j=0;j<14;j++){
if(i&(1<<j)){
bit[j]=1;
}
}
if(check()){
res++;
}
}
cout<<res;
}