算法竞赛入门经典 例题3-4 猜数字游戏的提示
来源:互联网 发布:js防水浆料检测设备 编辑:程序博客网 时间:2024/04/20 03:05
实现一个经典“猜数字”游戏。给定答案序列和用户猜的序列,统计有多少数字位置正确(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)
源代码:
#include <iostream>
using namespace std;
int main()
{
int n,sum=0;
while(cin>>n &&n) //当n不等于0时输入
{
sum++;
cout<<"Game"<<" "<<sum<<":"<<endl;
int* a=new int[n+1];
int* b=new int[n+1];
for(int x=1;x<=n;x++)
cin>>a[x];
for(;;) //无限循环,可以这么写,因为有条件:当b[0]=0跳出
{
int A=0,B=0;
for(int y=1;y<=n;y++)
{
cin>>b[y];
if(a[y]==b[y]) //边输入边判断,简洁
A++;
}
if(b[1]==0) //break可以跳出一个for
break;
for(int z=1;z<=9;z++)
{
int c1=0,c2=0,tmp;
for(int m=1;m<=n;m++)
{
if(a[m]==z)
c1++;
if(b[m]==z)
c2++;
}
if(c1<=c2)
tmp=c1;
else
tmp=c2;
B=B+tmp;
}
cout<<"("<<A<<","<<B-A<<")"<<endl;
}
}
return 0;
}
这个题目的主要问题是求B,按数学的思想,把答案序列和猜测序列对同一个数字,出现的次数最少的挑出来,这个数字最少的,减去对于这个数字相同的次数,就是这个数字的B。求出所有1-9中,在答案序列和猜测序列中出现的最小次数之和,减A就是B。
- 算法竞赛入门经典 例题3-4 猜数字游戏的提示
- 《算法竞赛入门经典2ndEdition》 例题3-4 猜数字游戏的提示(Master-Mind Hints, Uva340)
- 猜数字游戏的提示 算法竞赛入门经典
- 算法竞赛入门经典 例题 9-4
- 算法竞赛入门经典 例题 3-4 回文串
- 例题3-4 猜数字游戏的提示 UVa340
- 算法竞赛入门经典 例题4-2孪生素数
- 【算法竞赛入门经典】6.2链表 例题6-4 UVa11988
- 算法竞赛入门经典 例题7-3 倒水问题
- 算法竞赛入门经典 例题9-3 硬币问题
- 算法竞赛入门经典 例题 3-1 开灯问题
- 算法竞赛入门经典 例题 3-2 蛇形填数
- 算法竞赛入门经典 例题9-1
- 算法竞赛入门经典 例题8-1
- 算法竞赛入门经典例题-勇者斗恶龙
- 算法竞赛入门经典例题-蚂蚁
- 算法之路二:刘汝佳算法竞赛入门经典 3.8猜数字游戏 UVa340
- ☆算法竞赛入门经典(第二版) 例题4-2 猜单词(Hangman Judge) UVa489
- 2016"百度之星" - 资格赛(Astar Round1)【解题报告】
- 猴子吃桃问题---C实现
- Java泛型学习
- js学习一数组类型foreach方法
- Liferay开发过程中的一些常见问题
- 算法竞赛入门经典 例题3-4 猜数字游戏的提示
- mysql常见问题之添加服务与配置
- 打造轻量级 tableViewController 之抽离 DataSource/Delegate
- SPOJ-BALNUM Balanced Numbers (数位DP)
- spring boot 学习一之基础构建
- |和||、&&和&
- Android:Intent Filter 过滤器与隐式Intent
- Java.util中的排序
- Bom编程和Dom编程