UVA 340 Master-Mind Hints 猜密码游戏(水)

题意:给一串密码(第一行),接着再给你很多行猜测,针对每行猜测,输出两个数字,分表代表:同一列上匹配的个数,不同列上匹配的个数。注:匹配指的是一次,一旦配对,不能再与其他配对。

思路:每接受一行猜测就匹配,扫一遍就知道哪些是同列匹配的,统计出来,作为第一个输出的数字。扫的过程中将同列匹配的guess列置为零,顺便将不匹配的secret列插进哈希可重复的set中。接着再扫一遍guess数组,把非0的数字逐个在set中的找,找到了就删掉set中对应的数字,并统计个数。结果就出来了。

 1 #include <iostream>
 2 #include <unordered_set>
 3 #include <cstdio>
 4 using namespace std;
 5 const int N=1005;
 6 int secret[N];  //密码
 7 int guess[N];
 8 int main()
 9 {
10     freopen("input.txt", "r", stdin);
11     int n, j=0;
12     int pair_1,pair_2;
13     unordered_multiset<int> mul_set;
14     while(cin>>n,n!=0)
15     {
16         for(int i=0; i<n; i++)
17             cin>>secret[i];
18
19         cout<<"Game "<<++j<<":"<<endl;
20         while(1)
21         {
22             for(int i=0; i<n; i++)  //输入
23                 cin>>guess[i];
24             if(!guess[0]&&!guess[1])  break;           //结束例子
25
26             pair_1=0;
27             pair_2=0;
28             for(int i=0; i<n; i++)  //扫一遍,处理相同的
29             {
30                 if(secret[i]==guess[i])
31                 {
32                     pair_1++;
33                     guess[i]=0;
34                 }
35                 else
36                     mul_set.insert(secret[i]);
37             }
38
39             unordered_multiset<int>::iterator it;
40             for(int i=0; i<n; i++)  //再扫一遍
41             {
42                 if(guess[i])
43                 {
44                     it=mul_set.find(guess[i]);
45                     if(it!=mul_set.end())   //找到了
46                     {
47                         pair_2++;
48                         mul_set.erase(it);
49                     }
50                 }
51             }
52             mul_set.clear();
53             printf("    (%d,%d)\n", pair_1,pair_2);
54         }
55     }
56     return 0;
57 }

AC代码

时间: 2024-10-10 15:33:58

UVA 340 Master-Mind Hints 猜密码游戏(水)的相关文章

UVa 340 Master-Mind Hints(猜数字游戏的提示)

题意  猜数字游戏  统计猜的数字有多少个数字位置正确  有多少个数字在答案中出现但是位置不正确  每个字符只能匹配一次 直接匹配每位数 #include<cstdio> #include<algorithm> #include<map> using namespace std; const int N = 1005; int a[N], b[N], c, d; int main() { int n, cas = 0; while (scanf ("%d&qu

uva 340 A - Master-Mind Hints (暴力)

A - Master-Mind Hints Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Description MasterMind is a game for two players. One of them, Designer, selects a secret code. The other, Breaker, tries to break it. A code i

猜数字游戏的提示 (Master-Mind Hints, UVa 340)

题目: 实现一个经典"猜数字"游戏. 给定答案序列和用户猜的序列,统计有多少数字位置正确(A),有多少数字在两个序列都出现过但位置不对(B). 输入包含多组数据. 每组输入第一行为序列长度n,第二行是答案序列,接下来是若干猜测序列. 猜测序列全0时该组数据结束. n=0时输入结束. 样例输入:4 13 5 51 1 2 34 3 3 56 5 5 16 1 3 51 3 5 50 0 0 0101 2 2 2 4 5 6 6 6 91 2 3 4 5 6 7 8 9 11 1 2 2

通过游戏学python 3.6 第一季 第九章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号--锁定次数--菜单功能&#39;menufile

通过游戏学python 3.6 第一季 第九章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号--锁定次数--菜单功能'menufile 1 #猜数字--核心代码--猜测次数--随机函数和屏蔽错误代码---优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号--锁定次数--菜单功能'menufile' 2 #!usr/bin/env python 3 #-*-c

UVALive - 5448 / UVa 340 Master-Mind Hints

Master-Mind Hints Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Submit Status Description   MasterMind is a game for two players. One of them, Designer, selects a secret code. The other, Breaker, tries to break it. A code

UVa 340 Master-Mind Hints

蛋疼的题目描述,看了好长好长时间才看懂,题目本身是很简单的. Designer给出一串长度为N的Code,Breaker用Guess来破译. 对于两串数字,如果有同一列相等的数字,那么叫做strong  match, 位于不同列的相等的两个数字,叫做weak  match. 题目要求就是先输出strong的个数,然后是weak的个数. 对了,需要注意的是 1.每个code只能匹配一次,不论是strong还是match. 2.输出(*,*)的时候注意前面那四个空格,就因为这个我还PE了一次. 如果

猜数字游戏的提示(Master-Mind Hints,UVa340)

[本博文非博主原创,思路与题目均摘自 刘汝佳<算法竞赛与入门经典(第2版)>] Question 例题3-4 猜数字游戏的提示(Master-Mind Hints,UVa340) 实现一个经典的"猜数字"游戏.给定答案序列和用户猜的序列,统计有多少数字位置正确(A),有多少数字在两个序列都出现过但位置不对(B). 输入包含多组数据.每组输入第一行为序列长度 n,第二行是答案序列,接下来若干行猜测序列.猜测序列全0 时该组数据结束. n=0时输入结束. Example Inp

LeetCode:Bulls and Cows - 猜数字游戏

1.题目名称 Bulls and Cows(猜数字游戏) 2.题目地址 https://leetcode.com/problems/bulls-and-cows/ 3.题目内容 英文:You are playing the following Bulls and Cows game with your friend: You write a 4-digit secret number and ask your friend to guess it, each time your friend g

C实现一个比较简单的猜数游戏

为了练习使用do..while和while,特地使用此实例,一个简单的猜数游戏对while循环进行的练习使用.所有的东西都在注释当中: #include <stdio.h> #include <conio.h> /********************************** * 该实例用于实现一个简单的猜数字的游戏 * 主要用于练习使用while循环 * 开始的时候需要用户输入游戏密码(1234) * 如果用户输入错误 * 则提示用户重新输入 * 如果三次输入错误,则提示用