(位运算)An Easy Problem

it2023-11-05  76

题目链接

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; } } } }

总结

最新回复(0)