zoukankan      html  css  js  c++  java
  • [HDOJ] 1172.猜数字

    Problem Description

    猜数字游戏是gameboy最喜欢的游戏之一。游戏的规则是这样的:计算机随机产生一个四位数,然后玩家猜这个四位数是什么。每
    猜一个数,计算机都会告诉玩家猜对几个数字,其中有几个数字在正确的位置上。比如计算机随机产生的数字为1122。如果玩家猜
    其中一个在正确的位置。如果玩家猜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
    

    思路: 正面求解过于繁琐.. 想到4位数只有不到10^4个数字,对话数最大只有100,即采用枚举。对每个4位数进行N次判断。如果有且仅有一个数,符合每一个对话,这个数即有可能是求解数。

    #include <algorithm>
    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <string>
    #include <vector>
    using namespace std;
    
    int n;
    int num[101], b[101], c[101];
    
    bool check(int j, int i)
    {
      int s[4], t[4], tnum = num[i], tb = b[i], tc = c[i];
      for (int k = 3; k >= 0; --k)
      {
        s[k] = j % 10;
        j /= 10;
        t[k] = tnum % 10;
        tnum /= 10;
      }
      int corPos = 0, corNum = 0;
    
      for (int k = 0; k < 4; ++k)
        if (s[k] == t[k])
          ++corPos;
    
      for (int k = 0; k < 4; ++k)
        for (int l = 0; l < 4; ++l)
          if (s[k] == t[l])
          {
            ++corNum;
            t[l] = -1;
            break;
          }
      return corNum == tb && corPos == tc;
    }
    
    int main()
    {
      while (cin >> n, n)
      {
        int i, j, target, count = 0;
        for (i = 0; i < n; ++i)
        {
          cin >> num[i] >> b[i] >> c[i];
        }
    
        for (j = 3584; j < 3586 && count < 2; ++j)
        {
          for (i = 0; i < n; ++i)
            if (!check(j, i))
              break;
          if (i == n)
            ++count;
          target = j;
        }
        if (count != 1)
          cout << "Not sure" << endl;
        else
          cout << target << endl;
      }
    
      system("pause");
      return 0;
    }
  • 相关阅读:
    bootstrap模态框手动开启关闭与设置点击外部不关闭
    mybatis的增删改查返回值小析(六)
    mac安装python本版管理工具pyenv
    taro 编译 建议修改:使用循环的 index 变量作为 key 是一种反优化
    taro-多个input同一个事件处理
    python初探(01D) line 2 SyntaxError: Non-ASCII character 'xe8' 报错
    taro父、子组件通信
    taro---image引入图片
    webpack(五)---模块热替换
    webpack(四)---开发系列
  • 原文地址:https://www.cnblogs.com/ruoh3kou/p/9893459.html
Copyright © 2011-2022 走看看