• HDU 1172 猜数字


    http://acm.hdu.edu.cn/showproblem.php?pid=1172

    猜数字

    猜数字游戏是gameboy最喜欢的游戏之一。游戏的规则是这样的:计算机随机产生一个四位数,然后玩家猜这个四位数是什么。每猜一个数,计算机都会告诉玩家猜对几个数字,其中有几个数字在正确的位置上。 
    比如计算机随机产生的数字为1122。如果玩家猜1234,因为1,2这两个数字同时存在于这两个数中,而且1在这两个数中的位置是相同的,所以计算机会告诉玩家猜对了2个数字,其中一个在正确的位置。如果玩家猜1111,那么计算机会告诉他猜对2个数字,有2个在正确的位置。 
    现在给你一段gameboy与计算机的对话过程,你的任务是根据这段对话确定这个四位数是什么。 

    Input

    输入数据有多组。每组的第一行为一个正整数N(1<=N<=100),表示在这段对话中共有N次问答。在接下来的N行中,每行三个整数A,B,C。gameboy猜这个四位数为A,然后计算机回答猜对了B个数字,其中C个在正确的位置上。当N=0时,输入数据结束。 
    Output

    每组输入数据对应一行输出。如果根据这段对话能确定这个四位数,则输出这个四位数,若不能,则输出"Not sure"。 
    Sample Input

    6
    4815 2 1
    5716 1 0
    7842 1 0
    4901 0 0
    8585 3 3
    8555 3 2
    2
    4815 0 0
    2999 3 3
    0

    Sample Output

    3585
    Not sure
     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <algorithm>
     5 using namespace std;
     6 
     7 const int N = 110;
     8 struct Arr{
     9     int a,b,c;
    10 }arr[N];
    11 int hashA[N],hashB[N];
    12 bool judge(int y,int n)
    13 {
    14     memset(hashA,0,sizeof(hashA));  //初始化数组hashA
    15     int A1,B1,C1,D1,A2,B2,C2,D2;
    16     A1 = y % 10; hashA[A1]++;  //个位
    17     B1 = y / 10 % 10; hashA[B1]++;  //十位
    18     C1 = y / 100 % 10; hashA[C1]++;  //百位
    19     D1 = y / 1000 % 10; hashA[D1]++;  //千位
    20     for(int i = 0;i < n ; i++)  //判断键盘输入的 n 个数
    21     {
    22         memset(hashB,0,sizeof(hashB));  //初始化数组hashB
    23         int x = arr[i].a;
    24         A2 = x % 10; hashB[A2]++;
    25         B2 = x / 10 % 10; hashB[B2]++;
    26         C2 = x / 100 % 10; hashB[C2]++;
    27         D2 = x / 1000 % 10; hashB[D2]++;
    28         int cnt1 = 0, cnt2 = 0;  //cnt1记录在正确位置上的正确的个数
    29         if(A1 == A2) cnt1++;
    30         if(B1 == B2) cnt1++;
    31         if(C1 == C2) cnt1++;
    32         if(D1 == D2) cnt1++;
    33         if(cnt1 != arr[i].c) return false;
    34         for(int q = 0; q < 10; q++) cnt2 += min(hashA[q],hashB[q]); //单个数字个数介于 0 ~ 10
    35         if(cnt2 != arr[i].b) return false;
    36     }
    37     return true;
    38 }
    39 
    40 int main()
    41 {
    42     int n;
    43     while(~scanf("%d",&n) && n)
    44     {
    45         for(int i = 0; i < n;i++)  //输入 n 组数据
    46             scanf("%d %d %d",&arr[i].a,&arr[i].b,&arr[i].c);  //输入的数,猜对 B个数,C个在正确位置上
    47         int ans = -1;
    48         for(int i = 1000; i < 9999; i++)
    49         {
    50             if(judge(i,n))
    51             {
    52                 if(ans != -1) { ans = 0;break; }  //第二次匹配,结束匹配
    53                 ans = i;   //第一次匹配成功,继续匹配下一个数
    54             }
    55         }
    56         if(!ans) printf("Not sure
    "); 
    57         else printf("%d
    ",ans);
    58     }
    59     return 0;
    60 }
    永远年轻 永远热泪盈眶!
  • 相关阅读:
    Gravatar注册
    global name 'validate_on_submit' is not defined错误
    TypeError: 'bool' object is not callable g.user.is_authenticated()
    no module named flask.ext.login
    No module named migrate.versioning
    Flask-WTF form doesn't have attribute 'validate_on_submit'问题
    can not import Flask错误
    跨站点请求伪造
    sqlserver插入时发生在“xxx”处关键发生错误
    python 爬虫实列
  • 原文地址:https://www.cnblogs.com/Edviv/p/11441226.html
Copyright © 2020-2023  润新知