算法习题---3.01猜数字游戏提示(UVa340)
一.题目
实现一个经典“猜数字”游戏。给定答案序列和用户猜的序列,统计有多少数字位置正确(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)的更多相关文章
- [C++]猜数字游戏的提示(Master-Mind Hints,UVa340)
[本博文非博主原创,思路与题目均摘自 刘汝佳<算法竞赛与入门经典(第2版)>] Question 例题3-4 猜数字游戏的提示(Master-Mind Hints,UVa340) 实现一个 ...
- UVa 340 Master-Mind Hints(猜数字游戏的提示)
题意 猜数字游戏 统计猜的数字有多少个数字位置正确 有多少个数字在答案中出现可是位置不对 每一个字符仅仅能匹配一次 直接匹配每位数 #include<cstdio> #includ ...
- 猜数字游戏的提示(Master-Mind Hints, UVa 340)
实现一个经典"猜数字"游戏. 给定答案序列和用户猜的序列,统计有多少数字位置正确 (A),有多少数字在两个序列都出现过但位置不对(B). 输入包含多组数据.每组输入第一行为序列长度 ...
- 例题3_4 猜数字游戏的提示(UVa340)
实现一个经典“猜数字”游戏.给定答案序列和用户猜的序列,统计有多少数字位置正确(A),有多少数字在两个序列都出现过但位置不对(B). 输入包含多组数据.每组输入第一行为序列长度n,第二行是答案序列,接 ...
- C语言猜数字游戏
猜数字游戏,各式各样的实现方式,我这边提供一个实现方式,希望可以帮到新手. 老程序猿就不要看了,黑呵呵 源代码1 include stdio.h include stdlib.h include ti ...
- 不一样的猜数字游戏 — leetcode 375. Guess Number Higher or Lower II
好久没切 leetcode 的题了,静下心来切了道,这道题比较有意思,和大家分享下. 我把它叫做 "不一样的猜数字游戏",我们先来看看传统的猜数字游戏,Guess Number H ...
- java 猜数字游戏
作用:猜数字游戏.随机产生1个数字(1~10),大了.小了或者成功后给出提示. 语言:java 工具:eclipse 作者:潇洒鸿图 时间:2016.11.10 >>>>> ...
- 【原创Android游戏】--猜数字游戏Version 0.1
想当年高中时经常和小伙伴在纸上或者黑板上或者学习机上玩猜数字的游戏,在当年那个手机等娱乐设备在我们那还不是很普遍的时候是很好的一个消遣的游戏,去年的时候便写了一个Android版的猜数字游戏,只是当时 ...
- 【原创Android游戏】--猜数字游戏V1.1 --数据存储,Intent,SimpleAdapter的学习与应用
--------------------------------------------------------------- V0.1版本 上次做完第一个版本后,发现还有一些漏洞,并且还有一些可以添 ...
随机推荐
- Codeforces #496 E1. Median on Segments (Permutations Edition)
http://codeforces.com/contest/1005/problem/E1 题目 https://blog.csdn.net/haipai1998/article/details/80 ...
- linux网络编程之posix消息队列
在前面已经学习了System v相关的IPC,今天起学习posix相关的IPC,关于这两者的内容区别,简单回顾一下: 而今天先学习posix的消息队列,下面开始: 接下来则编写程序来创建一个posix ...
- AJAX学习笔记——同源策略
同源策略 同源策略,所有浏览器都实行这个政策 最初,它的含义是指,A 网页设置的 Cookie,B 网页不能打开,除非这两个网页"同源".所谓"同源"指的是&q ...
- java中创建对象的方式
Java中有5种创建对象的方式,下面给出它们的例子还有它们的字节码 使用new关键字 } → 调用了构造函数 使用Class类的newInstance方法 } → 调用了构造函数 使用Construc ...
- python - django (母版与组件)
# 把多个页面通用的部分提取出来 放在一个母版中 # 其它的页面只需要继承 母版就可以 # 使用步骤:( 继承的语句要放在第一行 ) """ 1. 把公用的 HTML 部 ...
- 44、[源码]-Spring容器创建-BeanFactory预准备
44.[源码]-Spring容器创建-BeanFactory预准备 @Override public void refresh() throws BeansException, IllegalStat ...
- 39、扩展原理-BeanFactoryPostProcessor
39.扩展原理-BeanFactoryPostProcessor BeanPostProcessor:bean后置处理器,bean创建对象初始化前后进行拦截工作的 BeanFactoryPostPro ...
- 38 | 都说InnoDB好,那还要不要使用Memory引擎?
我在上一篇文章末尾留给你的问题是:两个 group by 语句都用了 order by null,为什么使用内存临时表得到的语句结果里,0 这个值在最后一行:而使用磁盘临时表得到的结果里,0 这个值在 ...
- postgrepSQL psql基础操作
1.登录postgrepSQL psql 2.退出postgrepSQL \q 3.查看postgrepSQL里面的数据库 1)psql -l 2)\ l 4.切换DB \c db_name 5.查看 ...
- linux系列(二):cd命令
1.命令格式: cd [目录名] 2.命令功能: 切换当前目录至目录名目录 3.常用实例 (1).进入系统根目录 命令: cd / 输出: felix@felix-computer:~/软件$ cd ...