感觉这题很有趣,虽然是用来举例二进制的
一天,他提着酒壶,从家里出来,酒壶中有酒两斗。他边走边唱:
无事街上走,提壶去打酒。
逢店加一倍,遇花喝一斗。
一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光。清计算李白遇到店的和花的次序,
有多少可能的方案。
int ans=0;//方案数
for(int i=0;i<(1<<14);i++){//暴力枚举所有的14位二进制数
int tot_1 = 0;//遇到店的次数
int tot_0 = 0;//遇到花的次数
int num = 2;//开始的时候有两升酒
for(int j = 0;j < 14;++j){//从第0位到第13位判断二进制数
if(i&(1<<j)){//判断二进制数从第0位到第j位是否为1,判断这里比较难懂
tot_1++;//如果为1,记录下来
num = num*2;//加一倍
}else{
tot_0++;//如果为0,记录下来
num = num - 1;//减一升
}
}
if(tot_1 == 5 && tot_0== 9 && num == 1){//遇到店5次和遇到花9次,剩下一升酒,因为确定了最后一次遇到的是花,所以只要判断遇到花9次
++ans;//记录合法方案数
}
}
这个不是完整的代码,仅供参考
判断这里举个例子
1 0 1 0 0 0 0 0 1 0 1 0 1 0
1
1 0
1 0 0
。
。
。
1 0 0 0 0 0 0 0 0 0 0 0 0
对应着看下来,它就是从右到左,一个一个的比对,看有没有1的。