zoukankan      html  css  js  c++  java
  • UVa 340

    1.题目大意

    比较给定序列和用户猜想的序列,统计有多少数字位置正确(x),有多少数字在两个序列中都出现过(y)但位置不对。

    2.思路

    这题自己思考的思路跟书上给的思路差不多。第一个小问题——位置正确的数字数量可以很容易求出,第二个小问题——在两个序列中都出现过但位置不对的数字数量则要由“y-x=在两个序列中都出现过的数字数量-位置正确的数字数量”得出。

    3.应当注意的问题

    (1)虽然思路大同小异,但是具体实现的过程中能否很好地实现则很考验人。最开始写这题的时候,我甚至定义了4个数组,这点在后来证明了是没有必要的。因此在实现的过程中,如何简化应该是值得思考和练习的。

    (2)对于结束的判断,“正常的猜测序列不会有0,所以只判断第一个数是否为0即可”,其实在判断结束的实现这里我卡了一下,说明对题目的理解还不够。

    4.代码

    #include"stdio.h"
    #define maxn 1005
    
    int main()
    {
        int n,i,d,x,y,num1,num2,times=0;
        int a[maxn],b[maxn];
    
        while(scanf("%d",&n)==1 && n)
        {
            printf("Game %d:
    ",++times); //数据组数编号
            for(i = 0; i < n; i++)
                scanf("%d",&a[i]);
            for(;;)
            {
                x = 0;
                y = 0;
                for(i = 0; i < n; i++)
                {
                    scanf("%d",&b[i]);
                    if(a[i] == b[i]) x++;  //统计有多少数字位置正确
                }
                if(b[0] == 0) break;
    
                for(d = 1; d < 10; d++)
                {
                    num1=0;
                    num2=0;
                    for(i = 0; i<n; i++)
                    {
                        if(d == a[i])  num1++;
                        if(d == b[i])  num2++;
                    }
                    if(num1 < num2) y += num1;
                    else y += num2;
                }
                printf("    (%d,%d)
    ",x,y-x);
            }
        }
        return 0;
    }
    

      

      参考书目:算法竞赛入门经典(第2版) 刘汝佳 编著

  • 相关阅读:
    mybatis学习成长之路(一)
    badboy页面脚本发生错误,解决方案
    资料下载地址大全
    excel2003和excel2007文件的创建和读取
    文件的上传下载
    读取.properties的内容1
    Java的垃圾回收机制
    Bell数和Stirling数
    Catalan数计算及应用
    [算法]循环赛日程表
  • 原文地址:https://www.cnblogs.com/rgvb178/p/5945946.html
Copyright © 2011-2022 走看看