zoukankan      html  css  js  c++  java
  • 枚举HDU-1172猜数字

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

    题意:

      计算机随机产生一个四位数,玩家猜这个四位数是什么,每猜一个数计算机会告诉你猜对几个数,有几个数在正确位置上。

    多组输入数据,第一行表示共有N(N<=100),次问答,每行三个整数A,B,C,猜这个四位数为A,猜对了B个数字,C个在正确位置上。N=0时输入结束。

    题解:

      从正面分析的话,无从下手,然后数据范围只有100,且四位数的话总共也就只有10^4,直接枚举即可

      枚举的判决条件与所猜数字无关。

    代码:

    #include<iostream>
    #include<stdio.h>
    #include<stdlib.h>
    #include<string>
    #include<iomanip>
    
    using namespace std;
    const int maxn=110;
    typedef long long ll;
    
    int n;
    int a[maxn],b[maxn],c[maxn];
    int num;
    int ans;
    
    int check(int x,int y)
    {
      //4位数x是否符合第y次问答的结果
      int s[4],t[4],pa=a[y],pb=b[y],pc=c[y];
      for(int i=3; i>=0; i--)
      {
        s[i]=x%10,x/=10,t[i]=pa%10,pa/=10;
      }
    
      int correct_num=0,correct_pos=0;
      for(int i=0; i<4; i++)
      {
        if(s[i]==t[i]) correct_pos++;
      }
      for(int i=0; i<4; i++)
       for(int j=0; j<4; j++)
        if(t[j]==s[i])
        {
          correct_num++;
          t[j]=-1;
          break;
        }
        return correct_num==pb&&correct_pos==pc;
    }
    
    int main()
    {
      while(cin>>n&&n)
      {
        for(int i=0; i<n; i++) 
         cin>>a[i]>>b[i]>>c[i];
        num=0;
    
        for(int i=1000; i<10000&&num<2; i++)
        {
          int j=0;
          for(; j<n; j++) if(!check(i,j)) break;
          if(j==n) num++,ans=i;//满足所有问答的结果
        }
    
        if(num==1) cout<<ans<<endl;
        else cout<<"Not sure"<<endl;
      }
      system("pause");
      return 0;
    }
  • 相关阅读:
    文件管理系统(JQuery插件+Ajax)
    十大Ajax框架
    WSS3.0开发你还在为写CAML痛苦吗?
    vue获取微博授权的URL
    微博三方登录原理
    阿里云短信服务
    JWT原理和COOKIE原理
    django数据库的ORM操作
    celery原理与组件
    生成微博授权URL
  • 原文地址:https://www.cnblogs.com/sweetlittlebaby/p/14287236.html
Copyright © 2011-2022 走看看