题解 | #数字游戏#

数字游戏

https://ac.nowcoder.com/acm/contest/11217/A

import java.util.Scanner;



// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {

    public static class IntInfo {
        boolean flag; // 二进制表示时是否有奇数个1
        int highest_bit_index; // 二进制表示时1的最高位索引值

        public IntInfo() {
            flag = true;
            highest_bit_index = 0;
        }
    }

    public static IntInfo isOddCountOne(int arg) {
        int count = 0;
        int native1 = arg;
        IntInfo ret = new IntInfo();
        int index = 0;

        while ((native1 >> index) > 0) {
            if ((native1 & 1) == 1) {
                count++;
                ret.highest_bit_index = index;
            }

            index++;
        }

        ret.flag = (count % 2) == 0 ? true : false;

        return ret;
    }

    public static int getTransformTimes(int arg) {
        int ret = 0;

        while (arg > 0) {
            IntInfo info = isOddCountOne(arg);
            if(info.flag) {
                arg = arg ^ 1;
            } else {
                arg = arg ^ (1 << 31);
            }

            ret++;
        }
        return ret;
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        int count = in.nextInt();
        for (int i = 0; i < count; i++) {
            int num = in.nextInt();
            System.out.println(getTransformTimes(num));
        }
        // // 注意 hasNext 和 hasNextLine 的区别
        // while (in.hasNextInt()) { // 注意 while 处理多个 case
        //     int a = in.nextInt();
        //     int b = in.nextInt();
        //     System.out.println(a + b);
        // }
    }
}


全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务