An Easy Problem

GitHub跳转原题关系图返回列表

题意与原解析均从本地 OpenJudge 缓存迁移。

OJ: noi_openjudge

题目 ID: ch0406-1455

难度:未知

标签:

日期: 2026-07-30 23:01

题意

完整题面见同目录的 problem.md

思路

代码

cpp
#include <cstdio>
#include <cstring>

int n;


//进行操作
void getAns(int x){

    int cnt = 0; //计算用

    //找到第一个 符合条件的1
    int i;
    for(i=0;i<32;i++){
        if(  (x &(1<<i)) !=0 && ( x & (1<<(i+1))) == 0){
            //fined
            x = ( x | (1<<(i+1))); //第i+1位置1

            int t = ~((1<<(i+1))-1); // 1111000这种样式
            x = x & t; //后面全置0

            t = (1<<cnt)-1;
            x = x | t;
            break;
        }
        else if((x &(1<<i)) !=0)
            cnt++;
    }

    printf("%d\n",x);

}

int main(){
    
    while(1){
        scanf("%d",&n);
        if( n == 0)  break;

        getAns(n);


    }
    return 0;
}

复杂度

总结