首页 > 代码库 > nefu 640 Number Guessing

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;
}