猜数字游戏的提示 (Master-Mind Hints, UVa 340)
题目:
实现一个经典"猜数字"游戏。 给定答案序列和用户猜的序列,统计有多少数字位置正确
(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
0
样例输出:
Game 1:
(1,1)
(2,0)
(1,2)
(1,2)
(4,0)
Game 2:
(2,4)
(3,2)
(5,0)
(7,0)
代码:
1 #include<stdio.h> 2 #define maxn 1000 3 4 int a[maxn]; 5 int b[maxn]; 6 int main() 7 { 8 int count(0),n(1000); 9 while(scanf("%d",&n) == 1 && n) 10 { 11 int A(0), B(0); 12 count++; //用来记录是第几次游戏 13 printf("Game %d:\n",count); 14 for(int i = 0; i < n; i++) 15 scanf("%d",&a[i]); //读取答案序列 16 for(;;) 17 { 18 A = 0; B = 0; 19 for( i = 0; i < n; i++) 20 scanf("%d",&b[i]); //读取猜测序列 21 if ( b[0] == 0) break; 22 for( i = 0; i < n; i++) 23 { 24 if (a[i] == b[i]) A++; //判断撞库且位置正确的数量 25 } 26 for (i = 1; i <=9; i++) 27 { 28 int index1(0),index2(0); 29 for(int j = 0; j <n; j++) 30 { 31 if (a[j] == i) index1++; 32 if (b[j] == i) index2++; 33 } 34 if(index1 < index2) B += index1; 35 else B += index2; //判断撞库的总数量 36 } 37 printf("(%d,%d)\n",A,B-A); 38 } 39 } 40 return 0; 41 }
其中在我写的时候,我觉得有几个地方需要注意:
- scanf("%d",&a[i]) 其中&符号容易漏掉,虽然a是一个指针,可是a[i]却是一个value.
- 由于循环的嵌套比较多,所以要仔细检查一下哪些变量需要在某个循环的一开始就初始化,例如这里的A和B在每次判断撞库的一开始就要初始化,这方面的问题排查需要挺多的时间的
- 关于B(这里先定义为撞库的总数)的计算刚开始的时候很令人费解,在这个程序里面采用的是相同的数字,库与猜测方都进行比对,并得出数量。很明显如果库里这个数字的出现次数高于猜测方提供的数字里这个数字的次数直接的结果是B要加上这较小的数(因为无论如何猜测方猜到的同一个数字的数量不会超过这个数字出现的上限,这个可以画一个图就能明白)。经过从1到9的循环,最终的B就是总次数。
- 这样计算B的方式的式子简单但是理解有点不尽人意,当我们一个人站在这两行数字面前的时候,你想要对比数字大多数人会选择什么呢?对于我来说,应该是从库里依次选数字到猜测的数字里面去看对上了几个。不过这样的话,需要每次判断库里的数字有没有与之前重复的,举个例子库是 1 3 5 5 而如果你猜的是 4 3 3 5,那么这里的B是2而不是3,因为在1 3 5 5中最后两个数字是一样的,有一样的数字就需要排除。因此我给出的代码如下:
for (i = 0; i < n;i++){int flag = 1;if ( i > 0 )for(int min = 0; min < i; min++){if(a[i] == a[min]) flag = 0;}if (flag == 1) for (int j = 0; j < n;j ++){if(a[i] == b[j]) {B++;break;}}}
View Code
使用一个标签来判断是否有相同的,有相同的数字就跳过这个数字。
这个题目我看了好久好久才看懂题目,语文不好可真令人费解╮(╯▽╰)╭
转载于:https://www.cnblogs.com/dreamworldclark/p/9399135.html
猜数字游戏的提示 (Master-Mind Hints, UVa 340)相关推荐
- 例题3-4 猜数字游戏的提示(Master-Mind Hints, UVa 340)
实现一个经典"猜数字"游戏.给定答案序列和用户猜的序列,统计有多少数字位置正确 (A),有多少数字在两个序列都出现过但位置不对(B). 输入包含多组数据.每组输入第一行为序列长度n ...
- UVa340 Master-Mind Hints 猜数字游戏的提示 题解
UVa340 Master-Mind Hints 猜数字游戏的提示 题目链接:UVa340 题目描述 输入格式 输出格式 题目翻译 你的任务是实现一个经典的"猜数字"游戏.给定答案 ...
- 【基础编程】猜数字游戏的提示
★题目 实现一个经典"猜数字"游戏.给定答案序列和用户猜的序列,统计有多少数字位置正确(A),有多少数字在两个序列都出现过但位置不对(B) 输入包括多组数据.每组输入第一行为序列长 ...
- 猜数字游戏的提示(UVa340)
题目具体描述见:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_prob ...
- 【C语言】-猜数字游戏
目录 一.猜数字游戏 1.什么是猜数字游戏? 2.怎么实现猜数字游戏? 1>.分析需要的功能 2>.随机数的产生 3>.system()函数 4>.总代码 二.猜数字游戏+关机 ...
- java 后台跳出提示_小猿圈Java初学者练习小案例:猜数字游戏
对于Java初学者,如果没有好的引导,可能会觉得自己学什么都不好,学什么都不会,这个时候就要给他们一下小的案例,让他们去实践一下,让他们知道自己学的东西是可以用到的,小猿圈java讲师为你准备了Jav ...
- 提示猜数字范围python_Python 猜数字游戏
游戏内容:猜数字游戏 游戏过程描述 程序运行起来,随机在某个范围内选择一个整数. 提示用户输入数字,也就是猜程序随即选的那个数字. 程序将用户输入的数字与自己选定的对比,一样则用户完成游戏,否则继续猜 ...
- 【查找】临近省赛,Alan邀请emoji玩起了猜数字游戏活跃一下大脑。游戏规则如下:首先Alan写下几个数字让emoji猜,当emoji猜完之后,Alan会给他一个提示(java)
临近省赛,Alan邀请emoji大佬玩起了猜数字游戏活跃一下大脑.游戏规则如下: 首先Alan写下几个数字让emoji大佬猜,当emoji大佬猜完之后,Alan会给他一个提示,这个提示包含两部分:全对 ...
- 类的成员变量 猜数字游戏一个类A有一个成员变量v有一个初值100。 * 定义一个类对A类的成员变量v进行猜。 * 如果大了则提示大了小了则提示小了。等于则提示猜测成功。
/** 类的成员变量 猜数字游戏一个类A有一个成员变量v有一个初值100.* 定义一个类对A类的成员变量v进行猜.* 如果大了则提示大了小了则提示小了.等于则提示猜测成功.*/ import java ...
- 类的成员变量: 猜数字游戏:一个类A有一个成员变量v,有一个初值100。定义一个类,对A类的成员变量v进行猜。如果大了则提示大了,小了则提示小了。等于则提示猜测成功。
package com.leiclass.cle; import java.util.Scanner; public class Test1 { /** * 类的成员变量: 猜数字游戏:一个类A有 ...
最新文章
- gin 获取post请求的json body操作详解
- No module named ‘win32gui’ 以及 No module named ‘win32console’解决办法
- Quora上的大牛们最喜欢哪种机器学习算法?
- 【Git入门之十二】DIY Git
- android stub.asinterface是什么意思
- php中echo js代码,JS有没类似PHP的echo效果?
- AI工程师面试凭高频问题提前准备,命中率会是多少?
- [分享]iOS开发-实现UILabel显示出不同颜色并且某一部分产生下划线的效果 ...
- php+jquery+ajax+json的一个最简单实例
- hdu2147PN图的画法
- 手机app测试用例考虑测试点
- ## 作为多目标优化的多任务学习:寻找帕累托最优解+组合在线学习:实时反馈玩转组合优化-微软研究院+用于组合优化的强化学习:学习策略解决复杂的优化问题
- ICCV、ECCV、CVPR三大国际会议
- 你真的打算凑合过完这一生吗(转)
- React之Redux
- 如何做到服务的高并发、高可用?
- 计算机发展史图,图说计算机发展史
- 7-基本数据类型和复合数据类型(引用数据类型)
- 车截导航显示服务器错误怎么办,车载导航常见故障
- 【conda】conda环境的复制移植的两种方法
热门文章
- P Laguna/ A database for evaluation of algorithms for measurement of QT and other waveform interval
- 如何读出烧录程序.bin的数据_如何改变程序搜索数据的方式?使用Redis进行搜索...
- 数据结构之二叉查找树
- Zephyr下计算耗时
- 使用select模型详细介绍并使用此模型来监视标准输入缓冲区stdin里是否还有数据
- nyist oj 19 擅长排列的小明(dfs搜索+STL)
- 关于opencv设置视频的属性无效问题
- 如何为新的应用获取更高的关键字排名
- mysql注入***扫描备忘;
- 提供 web前端、H5、html页面 技术服务