一.题目

实现一个经典“猜数字”游戏。给定答案序列和用户猜的序列,统计有多少数字位置正确(A),有多少数字在两个序列都出现过但位置不对(B)。
输入包含多组数据。每组输入第一行为序列长度n,第二行是答案序列,接下来是若干猜测序列,猜测序列全0时该组数据结束。n=0时输入结束。

二:样例输入:

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   //结束序列
         //结束符

三:样例输出

Game :
(,)
(,)
(,)
(,)
(,)
Game :
(,)
(,)
(,)
(,)

实际效果:

Game :
输入答案序列
输入猜测序列
输出样例结果---(,)
输入猜测序列
输出样例结果---(,)
输入猜测序列
输出样例结果---(,)
输入猜测序列
输出样例结果---(,)
输入猜测序列
输出样例结果---(,)

四:重点分析--有多少数字在两个序列都出现过但位置不对(B)

实际就是将答案序列和猜测序列中满足数字位置正确的地方去除。
然后对剩余的进行比较数字是否在两个序列中存在且位置不对(一定不对,对的已经删除了)
例:

--------将相同的位置去除,即第三列 数目为1

-------查看满足数字同时处于两个序列的数字
5都在,且位置不对,所以数目为2
例:

---------------------将相同位置去除,即第1,2列---数目为2

---------------------查看满足数字同时处于两个序列的数字
9都在且位置不对---所以数目为4

1.额外声明数组记录下正确序列C和猜测序列D

2.统计数据正确的个数的同时---将对应CD数组对应位置减一

3.将CD数组进行比较,只有C[i]和D[i]同时存在,才认为这个数字在两个序列存在单位置不对

五:代码实现

#define MAX_N 1010

void test22()
{
//猜数字游戏
int n; //列数
int A[MAX_N], B[MAX_N]; //记录序列
int C[10],D[10],T[10]; //用于去重
int Count = ; //记录游戏次数
int jd; //判断是否结束
int Count_A, Count_B; //记录正确和出现的数据 while ()
{
//输出游戏
printf("Game %d:\n", ++Count); //1.进行输入,存储信息
scanf("%d", &n);
if (n == )
break; memset(C, 0, sizeof(C)); //输入正确序列到A
for (int i = 0; i < n; i++)
{
scanf("%d", &A[i]);
C[A[i]]++;
}
//输入猜测序列B
while ()
{
memset(D, 0, sizeof(D));
memcpy(T, C, sizeof
(C));
jd = ;
for (int i = ; i < n; i++)
{
scanf("%d", &B[i]);
if (B[i] != )
jd = ;
D[B[i]]++;
}
if (jd == )
break; //2.进行判断
Count_A = Count_B = ;
for (int i = ; i < n; i++)
if (A[i] == B[i])
{
Count_A++;
T[A[i]]--;
D[B[i]]--
;
} for (int i = ; i <= ; i++)
if (T[i]&&D[i])
Count_B++;
//3.进行输出信息
printf(" (%d,%d)\n", Count_A, Count_B);
} }
}

算法习题---3.01猜数字游戏提示(UVa340)的更多相关文章

  1. [C++]猜数字游戏的提示(Master-Mind Hints,UVa340)

    [本博文非博主原创,思路与题目均摘自 刘汝佳<算法竞赛与入门经典(第2版)>] Question 例题3-4 猜数字游戏的提示(Master-Mind Hints,UVa340) 实现一个 ...

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

    题意  猜数字游戏  统计猜的数字有多少个数字位置正确  有多少个数字在答案中出现可是位置不对  每一个字符仅仅能匹配一次 直接匹配每位数 #include<cstdio> #includ ...

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

    实现一个经典"猜数字"游戏. 给定答案序列和用户猜的序列,统计有多少数字位置正确 (A),有多少数字在两个序列都出现过但位置不对(B). 输入包含多组数据.每组输入第一行为序列长度 ...

  4. 例题3_4 猜数字游戏的提示(UVa340)

    实现一个经典“猜数字”游戏.给定答案序列和用户猜的序列,统计有多少数字位置正确(A),有多少数字在两个序列都出现过但位置不对(B). 输入包含多组数据.每组输入第一行为序列长度n,第二行是答案序列,接 ...

  5. C语言猜数字游戏

    猜数字游戏,各式各样的实现方式,我这边提供一个实现方式,希望可以帮到新手. 老程序猿就不要看了,黑呵呵 源代码1 include stdio.h include stdlib.h include ti ...

  6. 不一样的猜数字游戏 — leetcode 375. Guess Number Higher or Lower II

    好久没切 leetcode 的题了,静下心来切了道,这道题比较有意思,和大家分享下. 我把它叫做 "不一样的猜数字游戏",我们先来看看传统的猜数字游戏,Guess Number H ...

  7. java 猜数字游戏

    作用:猜数字游戏.随机产生1个数字(1~10),大了.小了或者成功后给出提示. 语言:java 工具:eclipse 作者:潇洒鸿图 时间:2016.11.10 >>>>> ...

  8. 【原创Android游戏】--猜数字游戏Version 0.1

    想当年高中时经常和小伙伴在纸上或者黑板上或者学习机上玩猜数字的游戏,在当年那个手机等娱乐设备在我们那还不是很普遍的时候是很好的一个消遣的游戏,去年的时候便写了一个Android版的猜数字游戏,只是当时 ...

  9. 【原创Android游戏】--猜数字游戏V1.1 --数据存储,Intent,SimpleAdapter的学习与应用

    --------------------------------------------------------------- V0.1版本 上次做完第一个版本后,发现还有一些漏洞,并且还有一些可以添 ...

随机推荐

  1. tomcat 处理HTTP请求

    一.Tomcat是什么?Tomcat是一个Web应用服务器,同时也是一个Servlet/JSP容器.Tomcat作为Servlet容器,负责处理客户端请求,把请求传送给Servlet,并将Servle ...

  2. Selenium常用API的使用java语言之2-环境安装之IntelliJ IDEA

    1.安装IntelliJ IDEA 你可能会问,为什么不用Eclipse呢?随着发展IntelliJ IDEA有超越Eclipse的势头,JetBrains公司的IDE基本上已经一统了各家主流编程语言 ...

  3. python - scrapy 爬虫框架 ( redis去重 )

    1.  使用内置,并加以修改 ( 自定义 redis 存储的 keys ) settings 配置 # ############### scrapy redis连接 ################# ...

  4. SQL数据库调优

    1.使用With As做数据库递归,调优树形表结构 例如:设计表结构简化如:ID.ParentID.Name:这里的ParentID就是这个表本身的某个ID WITH cte AS ( UNION A ...

  5. spark sql启动优化

    ./spark-sql --conf spark.driver.maxResultSize=8g --driver-memory 20g --conf  spark.kryoserializer.bu ...

  6. POJ P2279 Mr. Young's Picture Permutations 题解

    每日一题 day14 打卡 Analysis 五维dpf[a1,a2,a3,a4,a5]表示各排从左端起分别占了a1,a2,a3,a4,a5个人时合影方案数量然后我们枚举a1,a2,a3,a4,a5从 ...

  7. learning scala stripMargin

    (1)Scala中创建多行字符串使用Scala的Multiline String. 在Scala中,利用三个双引号包围多行字符串就可以实现. 代码实例如: val foo = "" ...

  8. [转] C++ STL中map.erase(it++)用法原理解析

    总结一下map::erase的正确用法. 首先看一下在循环中使用vector::erase时我习惯的用法: for(vector<int>::iterator it = vecInt.be ...

  9. C++类*类型和其他类型相互转换

    类类型转换时会出现两种之间转换,下面我们说的是类类型 1.其他类型转换为本类类型 通过类带一个参数的构造函数:或者多个参数构造函数,除了第一个参数后面参数都有默认值时!这样在其他类型赋值给该类类型对象 ...

  10. jsp 页面 javax.servlet.jsp.JspException cannot be resolved to a type 异常

    <dependencies><dependency><groupId>javax.servlet</groupId><artifactId> ...