public class test24 { // 给一个正整数N,表示有N份青草放在仓库里 // 有一只牛和一只羊,牛先吃,羊后吃,每一轮吃草量为4的某次方 // 谁先把草吃完,谁获胜,若羊和牛都想赢,都会做出合理的选择。返回谁会赢 public static String winner1(int n){ // 如果青草数量小于5,根据规则直接判断胜负 if(n < 5){ return (n == 0 || n == 2) ? "后手" : "先手"; } // 初始化基数为1,用于计算每轮吃的草的数量 int base = 1; // 当基数小于等于青草数量时,进行循环 while (base <= n ){ // 如果减去当前基数后的青草数量,如果后序过程还能赢(后序过程是后手),则当前获胜 if(winner1(n - base).equals("后手")){ return "先手"; } // 防止base*4后溢出 if(base > n/4){ break; } // 基数乘以4,进入下一轮 base *= 4; } // 其他情况下,后手获胜 return "后手"; } public static void main(String[] args) { for (int i = 0; i <= 50; i++) { System.out.println(i + ":" + winner1(i)); } //发现每五个一循环为后先后先先 } //根据打表的规律重现优化代码 public static String winner2(int n){ if(n%5 == 0 || n%5 == 2){ return "后手"; }else{ return "先手"; } } }
牛羊吃草问题(打表技巧)
于 2024-07-31 16:01:27 首次发布