当前位置: 首页 > news >正文

UVA340 猜数字游戏的提示 Master-Mind Hints

UVA340 猜数字游戏的提示 Master-Mind Hints

题目描述

PDF

输入格式

输出格式

输入输出样例 #1

输入 #1

4 1 3 5 5 1 1 2 3 4 3 3 5 6 5 5 1 6 1 3 5 1 3 5 5 0 0 0 0 10 1 2 2 2 4 5 6 6 6 9 1 2 3 4 5 6 7 8 9 1 1 1 2 2 3 3 4 4 5 5 1 2 1 3 1 5 1 6 1 9 1 2 2 5 5 5 6 6 6 7 0 0 0 0 0 0 0 0 0 0 0

输出 #1

Game 1: (1,1) (2,0) (1,2) (1,2) (4,0) Game 2: (2,4) (3,2) (5,0) (7,0)

题目大意

MasterMind 是一个双人游戏。其中一名玩家 “设计者” 选定一串密码,另一名玩家 “破译者” 尝试破解密码。密码是一排彩色圆点。游戏开局时,双方约定好密码的长度 N 以及可用的颜色种类。破译者会多次给出猜测串,每一轮猜测结束后,设计者会给出提示,说明本次猜测和真实密码的匹配程度。

本题给定真实密码s₁…sₙ和猜测串g₁…gₙ,要求计算对应的提示信息。匹配规则定义如下:

一对下标(i,j)满足sᵢ = gⱼ就构成一次匹配。当i=j时,这是强匹配;否则为弱匹配。两组匹配(i,j)和(p,q)互相独立的条件是:i=p和j=q必须同时成立。一个匹配集合里任意两组匹配都互相独立,就称这个集合是独立匹配集。

设计者要选出一个独立匹配集 M,使得集合内总匹配数尽可能大,同时强匹配的数量也要尽可能大。最终提示由集合 M 里强匹配数量在前、弱匹配数量在后组成,这两个数值是唯一确定的。如果提示为(n,0),说明猜测串和密码完全一致。

输入格式

输入包含多组游戏数据。每组游戏以整数 N(密码长度)开头,紧接着是由 N 个 1~9 整数组成的真实密码。之后会有多组猜测串,每组猜测串同样是 N 个 1~9 的整数。每组游戏的最后一行是 N 个 0,这一行不作为猜测串。一组游戏结束后会继续下一组游戏(如果还有数据),下一组依然以新的 N 开头。当单独输入一个 0 时,代表所有游戏输入结束。N 的最大取值为 1000。

输出格式

按顺序输出每组猜测对应的提示,每行一条。提示用括号包裹两个整数,中间用逗号隔开。每组游戏的输出开头要打印游戏编号,游戏从 1 开始顺序编号,严格参照样例格式输出。

解题思路

先算出强匹配的数量,逐个位置对照密码和猜测串,如果下标相同并且数字一致,就给强匹配计数加一,同时把这两个位置标记成已经占用,不让它们再参与后面弱匹配的计算。找弱匹配时,把两边剩下还没被占用的数字分别统计好每个数字出现了多少次,对于每一个数字,能形成弱匹配的对数就取两边数量里的小值,把所有数字的匹配数量加在一起,最终得到弱匹配总数。

完整代码

importjava.util.Scanner;publicclassMasterMindHints{publicstaticvoidmain(Stringargs[]){Scannersc=newScanner(System.in);intgame=1;while(true){intn=sc.nextInt();if(n==0){break;}int[]password=newint[n];for(inti=0;i<n;i++){password[i]=sc.nextInt();}System.out.println("Game "+game+":");game++;while(true){int[]guess=newint[n];booleanendLine=true;for(inti=0;i<n;i++){guess[i]=sc.nextInt();if(guess[i]!=0){endLine=false;}}if(endLine){break;}intstrong=0;boolean[]pas=newboolean[n];boolean[]gue=newboolean[n];for(inti=0;i<n;i++){if(password[i]==guess[i]){strong++;pas[i]=true;gue[i]=true;}}int[]pass=newint[10];int[]gues=newint[10];for(inti=0;i<n;i++){if(!pas[i]){pass[password[i]]++;}}for(inti=0;i<n;i++){if(!gue[i]){gues[guess[i]]++;}}intweak=0;for(inti=1;i<=9;i++){weak=weak+Math.min(pass[i],gues[i]);}System.out.println("("+strong+","+weak+")");}}sc.close();}}
http://www.jsqmd.com/news/1103502/

相关文章:

  • Windows驱动管理终极指南:Driver Store Explorer完全使用教程
  • CR2032电池供应商有哪些?国内外主要CR2032生产厂家盘点
  • 租车系统源码:一个源码级租车创业解决方案
  • 2026 TCL华星光电标杆研学参访|全球显示科技智能制造考察预约指南
  • 30+平台文档一键保存:kill-doc如何让免费文档下载变得如此简单
  • WarcraftHelper终极指南:3步搞定魔兽争霸3所有历史兼容性问题
  • 2026深度实测|适合团队的编程助手权威推荐,AI技术债治理落地全方案
  • 如何用novelWriter实现高效小说创作:从零到完整作品的完整指南
  • Parsec虚拟显示器:为Windows系统打造完美的屏幕扩展解决方案
  • 罗技PUBG压枪宏:5分钟快速配置终极指南,告别后坐力烦恼
  • 如何在3小时内构建企业级可视化工作流平台:RuoYi-Flowable-Plus完整指南
  • 工业品短视频获客/自然流量锐减询盘下滑?工业品短视频获客本地推完整投放方案
  • 物联网安全连接实战:A5000与STM32F412ZG的TLS协议实现
  • 告别黑屏切换:Borderless Gaming如何重新定义Windows游戏体验
  • WarcraftHelper完整指南:彻底解决魔兽争霸3兼容性问题的终极免费工具
  • 收藏!大模型入门必知核心知识,小白程序员快速上手指南
  • 2026年AI聚合API中转站横评实测:六大平台横向对比,企业级生产环境下该怎么选择API聚合平台?
  • 拆解开题写作全流程:paperxie 分层式智能开题功能,打通科研起步卡点
  • 大模型驱动软件工程:小白也能学会的AI研发新范式(收藏版)
  • 基于PLC的信号交通灯(西门子S7-1200 PLC;串行通信;15000字;高质量;组态设计)
  • sap btp/sap integration suite中根据Service Instance创建destination,ContentAssemblyService疑似bug问题及解决
  • 企业知识图谱建设核心逻辑:跳出浅层优化误区,构筑AI时代长效行业竞争壁垒
  • SV660F转矩读取关键配置
  • 精密研磨螺杆的核心加工工序是什么
  • 【万字文档+源码】基于SpringBoot+Vue明星周边商城系统-可用于毕设-课程设计-练手学习-学习资料分享
  • PPTist:免费在线PPT制作工具的终极指南,让演示文稿创作变得如此简单
  • 第4章 Linux 的文件系统——为什么 Linux 没有 C 盘?
  • 魔兽争霸3卡顿终结者:WarcraftHelper让你的经典游戏重获流畅体验
  • 好熬的有机小米
  • 腾讯会议领衔5款语音转写工具对比