题目链接
POJ 2453
题目大意
找到一个比J大的最小整数M,满足J和M的二进制中1的个数相同
思路
思路一
emmm,直接一个一个慢慢找不就好啦ヾ(•ω•`)o
思路二
直接找出来,找规律:从右往左找到第一个组合为01,交换位置之后,把01这一组合之后所有的0放到1的前面 (代码就不写了,明明有更简单的=_=嘿嘿)
代码
int main()
{
int n
;
while(cin
>> n
&& n
)
{
bitset
<32> bn
= n
;
int sn
= bn
.count();
for(int m
= n
+1; ; ++m
)
{
bitset
<32> bm
= m
;
if(bm
.count() == sn
)
{
cout
<< m
<< "\n";
break;
}
}
}
}
总结