zoukankan      html  css  js  c++  java
  • [C++]猜数字游戏的提示(Master-Mind Hints,UVa340)

    [本博文非博主原创,思路与题目均摘自 刘汝佳《算法竞赛与入门经典(第2版)》]

    Question

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

    实现一个经典的“猜数字”游戏。给定答案序列和用户猜的序列,统计有多少数字位置正确(A),有多少数字在两个序列都出现过但位置不对(B)。

    输入包含多组数据。每组输入第一行为序列长度 n,第二行是答案序列,接下来若干行猜测序列。猜测序列全0 时该组数据结束。 n=0时输入结束。

    Example Input

    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

    Example Output

    Game 1:
      (1,1)
      (2,0)
      (1,2)
      (1,2)
      (4,0)
    Game 2:
      (2,4)
      (3,2)
      (5,0)
      (7,0)

    Code 

    /*
    	例3-4 猜数字游戏的提示(Master-Mind Hints,UVa340) 
    */
    #include<iostream>
    using namespace std;
    
    const int maxn = 1010; 
    
    int main(){
    	int a[maxn],b[maxn];
    	int A,B,n,cases = 0;
    	while(scanf("%d", &n) == 1 && n){//n=0,则:结束 
    		printf("Game %d:
    ", ++cases);
    		for(int i=0;i<n;i++){
    			scanf("%d", &a[i]); //输入答案序列 
    		}
    		while(true){
    			B = 0;
    			A = 0;//位置一一匹配成功对:A归零
    			for(int j=0;j<n;j++){
    				scanf("%d", &b[j]);
    				if(a[j] == b[j])
    					A++;
    			}
    			if(b[0] == 0)//默认猜测序列的首元素为0,则为全0,结束猜测 
    				break;
    			int c1,c2;
    			for(int d=1;d<9;d++){//对于1-9,答案序列与猜测序列分别统计对应数字有多少个				
    				c1 = 0;
    				c2 = 0;
    				for(int j=0;j<n;j++){
    					if(a[j] == d)
    						c1++;
    					if(b[j] == d)
    						c2++;
    				} 
    				B += c1<c2?c1:c2;//对同一数字,答案序列的次数与猜测序列出现数字的次数,两序列中同一数字出现的次数最少值为m,则说明:
    				//	各数字在两序列中一一对应的对数不超过m,其中m包含了两部分:
    				//		1.一一对应的对数;	2.位置不匹配的对数 
    			}
    			printf("(%d,%d)
    ", A, B - A);	
    		}
    	}
    	return 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	 
    */
    

      

  • 相关阅读:
    sql server 2008数据库 降为 sql server 2005数据库 最终方案总结
    android 单元测试
    C# 5.0中引入了async 和 await
    Android之NDK开发
    Java NIO原理 图文分析及代码实现
    【第六篇】Volley之https相关
    【第五篇】Volley代码修改之图片二级缓存以及相关源码阅读(重写ImageLoader.ImageCache)
    【第四篇】Volley修改之GsonRequest
    java复习 --集合类
    android 图片加载优化,避免oom问题产生
  • 原文地址:https://www.cnblogs.com/johnnyzen/p/9096888.html
Copyright © 2011-2022 走看看