Uva 340

作者: cjs2019 | 来源:发表于2019-02-26 13:12 被阅读20次

//我在简书发布的第一篇文章~~

摘要:

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

题目翻译:

详见https://www.luogu.org/problemnew/show/UVA340

MasterMind是一款双人游戏。玩游戏时,其中一个人充当设计者,想一个序列(答案序列)。另一个人(即破解者)尝试去猜出答案序列。一个序列无非不过是一行彩色的点。在游戏的开始,玩家们会一起规定一个序列的长度N以及在一个序列中可能出现的颜色。

为了猜出原序列,破解者要做出许许多多的猜测,每一次猜测就是(给出)一个猜测序列。在每一次猜测之后,设计者要给出一个暗示/提示/线索……

PS。题干是说序列的元素是彩色的点,但是看到输入输出时,很显然,出题者把问题进行了抽象和简化,将“colorful dots”抽象成了整数,并简化为1~9。

求解:

A的求法:显然,未知正确,就是遍历整个猜测序列的数组guess[i],和答案序列对应相等guess[i]==answer[i],计数器cnt++即可(记得要cnt初始化为0哦);

B的求法:我一开始认为,它存在歧义。

“都出现过”,应该是指1~9中某一个,比如X和Y,在guess[]和answer[]中都出现过;

“位置不对”,

可以是指guess[i]!=answer[I]
也可以是指“X!=Y && guess[I]==X && answer[I]==Y”而且不存在“guess[I]==X && X==answer[I] || answer[j]==Y && Y==answer[j]”
也可以是指“guess[I]=X && X==answer[j] && I!=j”;

sample(测试样例) 告诉我,最后那一种解释,应该是正解。

代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define min(x,y) x>y?y:x

int main(){

int n,cnt=1;
scanf("%d",&n);
while(n!=0){
    printf("Game %d:\n",cnt);
    cnt++;
    int flag=0,a,b;
    int answer[n+10],guess[n+10],count[10],count_guess[10];
    memset(count,0, sizeof(count));
    for (int i = 0; i < n; ++i) {
        scanf("%d",&answer[i]);
        count[answer[i]]++;
    }
    a=b=0;
    memset(count_guess,0, sizeof(count_guess));
    for (int j = 0; j < n; ++j) {
        scanf("%d",&guess[j]);
        if (guess[j]==answer[j]){
            a++;
        }
        if (guess[j]!=0){
            flag=1;
        }
        count_guess[guess[j]]++;
    }
    while (flag){
        flag=0;
        for (int i = 1; i < 10; ++i) {
            b+=min(count[i],count_guess[i]);
        }
        b-=a;
        printf("\t(%d,%d)\n",a,b);
        a=b=0;
        memset(count_guess,0, sizeof(count_guess));
        for (int j = 0; j < n; ++j) {
            scanf("%d",&guess[j]);
            if (guess[j]==answer[j]){
                a++;
            }
            if (guess[j]!=0){
                flag=1;
            }
            count_guess[guess[j]]++;
        }
    }
    scanf("%d",&n);
}

return 0;

}

尾声:

不到10分钟前,刚刚见证了一次502,太真实了,没想到这么快就好了。
同行们(学长学姐们)加油!
(https://img.haomeiwen.com/i16466890/165b1207d5e9138c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

相关文章

  • Uva 340

    //我在简书发布的第一篇文章~~ 摘要: 实现一个经典的“猜数字”游戏。给定答案序列和用户猜的序列,统计有多少数字...

  • UV能量测试仪LS128的使用方法

    UV能量测试仪LS128专为UV LED设计,能完美响应340nm-420nm的UVA LED光源。是目前市面上...

  • 素数练习题

    UVA 10375 UVA 10791 UVA10375 Choose and divide 题解 先素数打表,然...

  • UVA-340 猜数字游戏的提示

    题目如下: 题目分析:ACM日常水题,直接统计就可以求出A了,但是求B需要遍历,在这里我增设了一个flag数组,只...

  • 有趣的数学题

    UVA12716 UVA11582 UVA12716 GCD XOR 题解 参考这题用到2个结论a ^ b = c...

  • 字典树

    UVA 11488题目链接https://uva.onlinejudge.org/index.php?option...

  • ACM 国内外几个网站 & 题目分类

    国外 西班牙Valladolid大学 Uva:https://uva.onlinejudge.org俄罗斯Ural...

  • 皮肤科学小知识:

    对皮肤造成损伤的紫外线主要是UVB和UVA。 UVA能穿透玻璃对皮肤的穿透能力也比较强,可以深达真皮,UVA的生物...

  • ACM刷题打卡-151215

    UVa 272 - TEX Quotes 水题。字符替换。 UVa 10082 - WERTYU 第一次提交WA,...

  • 美肤mini课堂之防晒的理论知识

    1、关于UVA和UVB UVB是波短的紫外线,威力次于UVA,只能晒到表皮层,能把皮肤晒红、晒伤;UVA是波长的紫...

网友评论

    本文标题:Uva 340

    本文链接:https://www.haomeiwen.com/subject/phznyqtx.html