• HDU 1172 猜数字


    很久以前做过了,当时以为是搜索,不大会做。后来还是看别人的方法,觉得不是简洁。

    今天再做一次,1Y了。水题一道,但有很多技巧

    1.如果有多个答案,那就不是正确的解

    2.正确的对位数是很容易求的,难的是才对的那个要仔细写。

    3.代码的方法直接纯暴力了。

    #include <stdio.h>
    #include <string.h> 
    #define maxn 120
    
    int n;
    int gus[maxn] , pos[maxn] , rig[maxn];
    
    int test_pos(int a,int b){
        int cnt = 0;
        while(a > 0){
            if(a%10 == b%10) cnt++;
            a/=10;b/=10;
        }
        return cnt;
    }
    int vis1[10],vis2[10];
    int test_rig(int a,int b){
        int _b=b;
        int cnt = 0;
        memset(vis1,0,sizeof(vis1));
        memset(vis2,0,sizeof(vis2));
        while(a > 0){
             vis1[a%10]++;
            a/=10;
        }
        while(b > 0){
            int t = b%10;
            vis2[b%10]++;
            b /= 10;
        }
        for(int i=0;i<10;i++) {
            if(vis1[i] > 0 && vis2[i] > 0){
                int tx = vis1[i]<vis2[i]?vis1[i]:vis2[i];
                cnt += tx;
            }
        }
        return cnt;
    }
    
    bool test(int num)
    {
        for(int i=1;i<=n;i++)
        {
            int k1,k2;
            int ok1=(rig[i] == (k1=test_rig(gus[i],num)));
            int ok2=(pos[i] == (k2=test_pos(gus[i],num)));
            if(!ok1 || !ok2) return false;
        }
        return true;
    }
    
    int vio()
    {
        int ok=0 ,cnt=0;
        for(int i=1000;i<=9999;i++)
        {
            if(test(i)){
                if(cnt == 0) ok=i;
                cnt++;
            }
        }
        if(cnt > 1 || cnt == 0) return 0;
        return ok;
    }
    
    int main()
    {
        while(scanf("%d",&n),n)
        {
            int t;
            for(int i=1;i<=n;i++) 
                scanf("%d %d %d",&gus[i],&rig[i],&pos[i]);
            if((t=vio()) > 0)
                printf("%d
    ",t);
            else printf("Not sure
    ");
        }
        return 0;
    }
    View Code
  • 相关阅读:
    python timeit模块用法
    boto3库限速
    golang-Beego-orm创建的坑
    Java07
    Java06
    Java04
    Java03
    c
    Mac 安装GCC
    命令: go build
  • 原文地址:https://www.cnblogs.com/cton/p/3440114.html
Copyright © 2020-2023  润新知