nefu 640 Number Guessing

来源:互联网 发布:思科交换机端口配置ip 编辑:程序博客网 时间:2024/06/11 17:04

题目:大意就是猜数,给定个四位数,然后给出这个数与正确的数之间的比较(#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
原创粉丝点击