nefu 640 Number Guessing

题目:大意就是猜数,给定个四位数,然后给出这个数与正确的数之间的比较(#A*B,#代表有#个数字他的值和位置都对了,*代表有*个数的值对了),给出n个上述的4位数,让你确定这个正确的数是多少。

思路:直接暴力。

注意:程序结束是n为负数,而不是-1,为此超时了两次 T T。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
struct node
{
     char s[5];
     int a,b;
}t[5600];
int n;
bool  solve(char a,char b,char c,char d)
{
    int l=0,r=0;
    for(int i=0;i<n;i++)
    {
        l=0,r=0;
        if(t[i].s[0]==a) l++,r++;
        else if(t[i].s[0]==b||t[i].s[0]==c||t[i].s[0]==d) r++;
        if(t[i].a<l||t[i].b<r) return false;
        if(t[i].s[1]==b) l++,r++;
        else if(t[i].s[1]==a||t[i].s[1]==c||t[i].s[1]==d) r++;
        if(t[i].a<l||t[i].b<r) return false;
        if(t[i].s[2]==c) l++,r++;
        else if(t[i].s[2]==b||t[i].s[2]==a||t[i].s[2]==d) r++;
        if(t[i].a<l||t[i].b<r) return false;
        if(t[i].s[3]==d) l++,r++;
        else if(t[i].s[3]==b||t[i].s[3]==c||t[i].s[3]==a) r++;
        if(t[i].a!=l||t[i].b!=r) return false;
    }
    return true;
}
int main()
{
     int i,j,k,l;
     while(scanf("%d",&n))
     {
         if(n<0) break;
         for(i=0;i<n;i++)
         {
             scanf("%s %dA%dB",t[i].s,&t[i].a,&t[i].b);
         }
         for(i='0';i<='9';i++)
         for(j='0';j<='9';j++)
         {
             if(i==j) continue;
            for(k='0';k<='9';k++)
            {
                if(k==i||k==j) continue;
                for(l='0';l<='9';l++)
                {
                    if(l==k||l==j||l==i) continue;
                    if(solve(i,j,k,l))
                    {
                        printf("%c%c%c%c\n",i,j,k,l);
                        goto En;
                    }
                }
            }
         }
         En:continue;
     }
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值