zoukankan      html  css  js  c++  java
  • 算法竞赛入门经典 例题3-4 猜数字游戏的提示

    实现一个经典“猜数字”游戏。给定答案序列和用户猜的序列,统计有多少数字位置正确(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。


  • 相关阅读:
    php数组到json的转变
    微信小程序获取微信绑定的手机号
    微信小程序授权登录
    用海豚框架(DolphinPHP)实现单/多图片上传时,如何获得图片路径
    数据库索引-简单了解
    php将二维数组转换成我想要的一维数组
    php的八大数据类型
    单例模式
    Springboot配置Sqlserver
    WinForm 文件操作
  • 原文地址:https://www.cnblogs.com/iamjuruo/p/7470977.html
Copyright © 2011-2022 走看看