一、纸牌游戏Alex 与 Bob 进行如下纸牌游戏∙ ∙ 牌面数字均为 1∼10 的整数∙ ∙ 每位玩家各有两张暗牌自己也不知道牌面∙ ∙ 游戏共两回合每回合双方各随机翻开一张未翻开的牌并比较大小∙ ∙ 翻开的牌面数字更大者赢得该回合若相等则该回合无人获胜∙ ∙ 两回合结束后赢得回合数更多者获胜若平局则无人获胜。已知四张牌的具体数字Alex 拥有 a1,a2Bob 拥有 b1,b2。牌面分配固定但翻牌顺序随机。请计算 Alex 最终获胜的不同翻牌顺序数量。import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner new Scanner(System.in); int t scanner.nextInt(); while (t-- 0) { int a1 scanner.nextInt(); int a2 scanner.nextInt(); int b1 scanner.nextInt(); int b2 scanner.nextInt(); int count 0; // Alex的两种翻牌顺序 int[][] alexOrders {{a1, a2}, {a2, a1}}; // Bob的两种翻牌顺序 int[][] bobOrders {{b1, b2}, {b2, b1}}; // 遍历所有可能的翻牌顺序组合 for (int[] alex : alexOrders) { for (int[] bob : bobOrders) { // 计算双方赢得的回合数 int alexWins 0; int bobWins 0; if (alex[0] bob[0]) { alexWins; } else if (alex[0] bob[0]) { bobWins; } if (alex[1] bob[1]) { alexWins; } else if (alex[1] bob[1]) { bobWins; } // 当Alex赢得的回合数多于Bob时才是Alex获胜 if (alexWins bobWins) { count; } } } System.out.println(count); } scanner.close(); } }运行结果二、多项式输出import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner new Scanner(System.in); // 读取多项式次数 int n scanner.nextInt(); // 读取系数顺序是a_n, a_{n-1}, ..., a_0 int[] coefficients new int[n 1]; for (int i 0; i n; i) { coefficients[i] scanner.nextInt(); } scanner.close(); // 构建多项式字符串 StringBuilder result new StringBuilder(); boolean isFirstTerm true; // 从高次到低次处理每一项 for (int i 0; i n; i) { int coefficient coefficients[i]; int degree n - i; // 当前项的次数 // 系数为0的项完全省略 if (coefficient 0) { continue; } // 处理符号 if (isFirstTerm) { // 首项若系数为正不输出前导 if (coefficient 0) { result.append(-); } isFirstTerm false; } else { // 后续正系数项前需加负系数项加- if (coefficient 0) { result.append(); } else { result.append(-); } } // 处理系数的绝对值 int absCoeff Math.abs(coefficient); // 当系数为1或-1且次数≥1时省略系数的绝对值1 if (!(absCoeff 1 degree 1)) { result.append(absCoeff); } // 处理变量部分 if (degree 0) { result.append(x); // 次数为1输出x次数≥2输出x^k if (degree 1) { result.append(^).append(degree); } } // 次数为0仅输出常数这里不需要额外处理 } System.out.println(result.toString()); } }运行结果三、乒乓球旺仔哥哥特别喜欢打乒乓球有一天他给你一串由字符 W 与 L 组成的比赛记录W表示旺仔哥哥得分L 表示对手得分。请分别按11 分制与21 分制统计比赛结果并输出每局比分。规则如下∙ ∙ 当且仅当一局比赛中存在某个选手分数不小于 11或 21且双方比分差 ≧2 时判定一局结束此时得分高的选手获胜∙ ∙ 若读取结束时当前局未结束也需输出当前比分∙ ∙ 新局开始时比分记为 0:0。import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner new Scanner(System.in); String s scanner.nextLine(); scanner.close(); // 计算11分制结果 ListString result11 calculateScore(s, 11); // 计算21分制结果 ListString result21 calculateScore(s, 21); // 输出11分制结果 for (String score : result11) { System.out.println(score); } // 空行分隔 System.out.println(); // 输出21分制结果 for (String score : result21) { System.out.println(score); } } /** * 根据指定的分制计算比赛结果 * param s 比赛记录字符串 * param target 分制11或21 * return 每局比分的列表 */ private static ListString calculateScore(String s, int target) { ListString result new ArrayList(); int wScore 0; // 旺仔哥哥的得分 int lScore 0; // 对手的得分 for (char c : s.toCharArray()) { // 更新得分 if (c W) { wScore; } else { lScore; } // 检查当前局是否结束 if (isGameOver(wScore, lScore, target)) { // 记录本局比分 result.add(wScore : lScore); // 开始新局重置分数 wScore 0; lScore 0; } } // 处理未结束的局nbs***bsp;新开的局 if (wScore 0 || lScore 0) { result.add(wScore : lScore); } else if (wScore 0 lScore 0) { result.add(0 : 0); } return result; } /** * 判断当前局是否结束 * param w 旺仔哥哥的得分 * param l 对手的得分 * param target 分制11或21 * return 若局结束则返回true否则返回false */ private static boolean isGameOver(int w, int l, int target) { // 当且仅当一局比赛中存在某个选手分数不小于target且双方比分差≥2时判定一局结束 return (w target || l target) Math.abs(w - l) 2; } }运行结果四、回文日期一个日期用 YYYYMMDD的 8 位数字表示其中前四位为年份接着两位为月份最后两位为日期。若这 8位数字本身是一个回文数则称该日期为回文日期。给定起始日期 a 与终止日期 b均包含在内且满足 a≦b请计算区间内真实存在的回文日期数量。【名词解释】回文数一个数字从左往右读与从右往左读完全相同。【日期合法性】∙ ∙ 1,3,5,7,8,10,12 月有 31 天∙ ∙ 4,6,9,11 月有 30 天∙ ∙ 2 月在闰年有 29 天平年有 28 天。【闰年判定】∙ ∙ 能被 4 整除但不能被 100 整除的年份∙ ∙ 或能被 400 整除的年份。输入描述第一行输入 8 位整数 a表示起始日期。第二行输入 8 位整数 b表示终止日期。输出描述输出一个整数表示 [a,b]区间内回文日期的数量。import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner new Scanner(System.in); int a scanner.nextInt(); // 起始日期 int b scanner.nextInt(); // 终止日期 scanner.close(); int count 0; // 遍历所有可能的回文日期 // 8位回文日期的特点前4位与后4位对称如20211202 // 因此只需遍历前4位后4位由前4位反转得到 int startYear a / 10000; int endYear b / 10000; for (int year startYear; year endYear; year) { // 生成回文日期 int palindromeDate generatePalindromeDate(year); // 检查是否在区间内 if (palindromeDate a palindromeDate b) { // 检查日期是否合法 if (isValidDate(palindromeDate)) { count; } } } System.out.println(count); } /** * 根据年份生成可能的回文日期 * 例如年份2021生成回文日期20211202 */ private static int generatePalindromeDate(int year) { // 将年份转为字符串 String yearStr String.format(%04d, year); // 反转年份字符串得到日期部分 String reversedYear new StringBuilder(yearStr).reverse().toString(); // 组合成8位回文日期 return Integer.parseInt(yearStr reversedYear); } /** * 检查日期是否合法 */ private static boolean isValidDate(int date) { // 解析年、月、日 int year date / 10000; int month (date % 10000) / 100; int day date % 100; // 检查月份合法性 if (month 1 || month 12) { return false; } // 检查日期合法性 if (day 1) { return false; } // 大月有31天 if (month 1 || month 3 || month 5 || month 7 || month 8 || month 10 || month 12) { return day 31; } // 小月有30天 else if (month 4 || month 6 || month 9 || month 11) { return day 30; } // 2月考虑闰年 else { // month 2 if (isLeapYear(year)) { return day 29; } else { return day 28; } } } /** * 判断是否为闰年 * 能被4整除但不能被100整除或能被400整除的年份是闰年 */ private static boolean isLeapYear(int year) { return (year % 4 0 year % 100 ! 0) || (year % 400 0); } }运行结果