给定一个位串s
,我正在寻找一种方法,将0
中的随机s
位设置为1
位。此外,用户应该能够指定可以在s
中设置“左”的距离。对于奖励积分,如果所有位都已设置,解决方案仍应终止,并且当只剩下一个0
位时,解决方案不应该减速。
给出具体(但天真)的例子:
for (int i = 0; ; i = (i+1) % last) {
if (!(*v & (1 << i)) && random() > RAND_MAX/2) {
*v |= (1 << i);
return;
}
}
可能有更好的方法可以做到这一点,希望Stack Overflow的无所不知的蜂巢头脑可以告诉我如何。
答案 0 :(得分:0)
如果计算了指定范围内的0位数,则在该范围内选择一个随机数N,然后翻转第N个0位,这将满足您的“奖励”要求。