本文主要是介绍(蓝桥杯每日一题)游戏最优解及求二进制中有多少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();}
}
敲代码中使用好的数学方法更能事半功倍!
这篇关于(蓝桥杯每日一题)游戏最优解及求二进制中有多少1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!