L1-044 稳赢(15分)

张开发
2026/4/15 3:23:12 15 分钟阅读

分享文章

L1-044 稳赢(15分)
题目信息项目内容题目编号L1-044题目名称稳赢分数15分作者陈越单位浙江大学题目描述大家应该都会玩锤子剪刀布的游戏两人同时给出手势胜负规则如下锤子(ChuiZi) 赢 剪刀(JianDao)剪刀(JianDao) 赢 布(Bu)布(Bu) 赢 锤子(ChuiZi)现要求你编写一个稳赢不输的程序根据对方的出招给出对应的赢招。但是为了不让对方输得太惨你需要每隔K次就让一个平局。解题思路本题需要模拟锤子剪刀布游戏并按照规则输出稳赢的招式同时每隔K次输出一个平局。核心逻辑建立手势之间的胜负关系映射维护当前计数器和平局间隔K当计数器达到K时输出平局即与对方相同的手势并重置计数器否则输出稳赢的手势克制对方的手势克制关系对方出锤子 → 我出布布赢锤子对方出剪刀 → 我出锤子锤子赢剪刀对方出布 → 我出剪刀剪刀赢布Java实现import java.util.*; public class Main { public static void main(String[] args) { Scanner scanner new Scanner(System.in); int K scanner.nextInt(); // 平局间隔次数 // 记录已经输出的次数不含平局 int count 0; while (scanner.hasNext()) { String input scanner.next(); if (input.equals(End)) { break; } count; if (count % (K 1) 0) { // 平局输出与对方相同的手势 System.out.println(input); } else { // 输出稳赢的手势 System.out.println(getWinGesture(input)); } } scanner.close(); } // 获取克制对方手势的稳赢手势 private static String getWinGesture(String opponent) { switch (opponent) { case ChuiZi: return Bu; // 布赢锤子 case JianDao: return ChuiZi; // 锤子赢剪刀 case Bu: return JianDao; // 剪刀赢布 default: return ; } } }Python实现def main(): K int(input()) # 平局间隔次数 count 0 # 手势克制关系对方手势 - 稳赢手势 win_map { ChuiZi: Bu, # 布赢锤子 JianDao: ChuiZi, # 锤子赢剪刀 Bu: JianDao # 剪刀赢布 } while True: gesture input() if gesture End: break count 1 if count % (K 1) 0: # 平局输出与对方相同的手势 print(gesture) else: # 输出稳赢的手势 print(win_map[gesture]) if __name__ __main__: main()运行验证输入2 ChuiZi JianDao Bu JianDao Bu ChuiZi ChuiZi EndJava输出Bu ChuiZi Bu JianDao JianDao ChuiZi BuPython输出Bu ChuiZi Bu JianDao JianDao ChuiZi Bu复杂度分析时间复杂度O(N)其中N为输入的出招次数空间复杂度O(1)只使用常数级别的额外空间总结本题是一道简单的模拟题关键点在于正确理解克制关系并建立映射理解每隔K次平局的规则即每K1次输出一次平局边界情况处理平局时输出与对方相同的手势

更多文章