当前位置: 首页 > 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.gsyq.cn/news/1615469.html

相关文章:

  • 如何用Python命令行工具打造你的终极个人音乐库:netease-cloud-music-dl完全指南
  • 30+平台文档一键保存:kill-doc如何让免费文档下载变得如此简单
  • 2026深度实测|适合团队的编程助手权威推荐,AI技术债治理落地全方案
  • 罗技PUBG压枪宏:5分钟快速配置终极指南,告别后坐力烦恼
  • 物联网安全连接实战:A5000与STM32F412ZG的TLS协议实现
  • WarcraftHelper完整指南:彻底解决魔兽争霸3兼容性问题的终极免费工具
  • 收藏!大模型入门必知核心知识,小白程序员快速上手指南
  • 基于PLC的信号交通灯(西门子S7-1200 PLC;串行通信;15000字;高质量;组态设计)
  • 大模型驱动软件工程:小白也能学会的AI研发新范式(收藏版)
  • 魔兽争霸3卡顿终结者:WarcraftHelper让你的经典游戏重获流畅体验
  • 【万字文档+源码】基于SpringBoot+Vue明星周边商城系统-可用于毕设-课程设计-练手学习-学习资料分享
  • 如何在Windows上使用DS4Windows完美连接PS4/PS5手柄:5分钟快速上手指南
  • 云南农产品企业官网建设技术方案:从需求到落地的完整架构
  • Trilium中文版:全中文界面的开源知识管理软件终极指南
  • 收藏!AI大模型选哪个?新手程序员必看,帮你找到最优解!
  • WarcraftHelper终极指南:让经典魔兽争霸III焕发新生的完整解决方案
  • 供应链 CRM 数据泄露引发定向钓鱼多维检测与闭环防御研究
  • DayZ终极离线生存指南:为什么你需要这个完整的单机体验
  • 美洲物联网开发:LTE Cat 1bis模块与PIC24EP微控制器实战
  • 漏洞扫描实战:从原理到自动化运营的完整指南
  • tModLoader技术架构解析:构建泰拉瑞亚模组生态的工程化解决方案
  • 高质量数据集到底是什么
  • 摩托车无钥匙启动PKE智能感应极致便捷体现在哪些方面
  • DS4Windows:将PlayStation手柄完美适配Windows游戏的完整解决方案
  • 深入AMD Ryzen硬件调试:SMUDebugTool底层通信机制与技术实现
  • 从1MB到1TB,OceanBase实现常数时间事务提交——SIGMOD 2025论文
  • 3分钟掌握ASMR下载神器:asmroner帮你轻松获取asmr.one音频资源
  • 深度实战:waifu2x-caffe图像超分辨率与降噪的进阶指南
  • WarcraftHelper:专业级魔兽争霸III现代化增强工具完全指南
  • Sunshine游戏串流:终极自托管方案,让PC游戏无处不在