(蓝桥杯每日一题)游戏最优解及求二进制中有多少1

问题描述:

小 A和小 B 两个人在海边找到了 n 个石子,准备开始进行一些游戏,具体规则如下:小 B首先将 n 个石子分成若干堆,接下来从小 A开始小 A和小 B轮流取石子,每次可以任选一堆石子取走任意个,不可不取,没石子可取的输。问在最优策略的情况下,小 A和小 B到底谁能赢得游

问题解析:

这个游戏可以通过奇偶性来判断最后谁会赢得游戏。

假设初始时有n个石子。如果n是偶数,小A总是可以赢得游戏。因为无论小B如何分堆,小A都可以以相同的方式去取,最后一定会是小B无法取石子。

如果n是奇数,小B可以通过一些策略获胜。小B可以保证每次小A取完石子后,剩余石子的堆数和数量都是奇数。这样无论小A怎么取,最后都会留下一个石子给小B。

通过这些信息,我们可以得出结论:当初始石子数是偶数时,小A胜;当初始石子数是奇数时,小B胜。

代码如下:

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
        int n = scan.nextInt();
        System.out.println(n % 2 == 0 ? "B" : "A");
        scan.close();
    }
}

问题2:

小蓝刚学习完二进制知识,所以现在他对任何数字的二进制都特别感兴趣。恰好即将迎来 2024年,他想知道 2024 的二进制中几个 1?
请你帮忙解决这个问题。

问题解析:

通过十进制转二进制的除2取余方法。

代码如下:

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
        int i=2024;
        int count=0;
        int a=0;
        while(i!=0)
        {
            a=i%2;
            i=i/2;
            if(a==1)
            {
              count++;
            }
        }
        
          System.out.println(count);
        scan.close();
    }
}

敲代码中使用好的数学方法更能事半功倍!

你可能感兴趣的:(蓝桥杯,游戏,职场和发展)