UVa 340 - Master-Mind Hints

一个经典的猜数字游戏,本题交了一次就过了,但是调试花费了很大的功夫,一直也没找到原因,漏了几种情况,幸好在测试用例中找到了bug,调试了很久,用了3个goto语句,使得程序可能不容易被其他人理解吧,感觉这不是最简单的思路,应该再去看看别人的思路。  还有最重要的一点,读题一定要全面,详细,不要漏条件!!!
 #include <stdio.h>
#include <string.h>
int main()
{
    int m,n,i,j,k,r,s,t,cishu=1,A,B;
    int a[10000],b[10000],c[10000];
    while(scanf("%d",&n) != EOF)
    {
        if(n == 0)
            break;
        for(i=1; i<=n; i++)
            scanf("%d",&a[i]);
        printf("Game %d:\n",cishu);    cishu++;
        while(1)
        {
            r=0;  A=0;  B=0;
            for(i=1; i<=n; i++)
                scanf("%d",&b[i]);
            for(i=1; i<=n; i++)
                if(b[i] == 0)
                    r++;
            if(r==n)
                goto loop3;
            t=1;
            for(i=1; i<=n; i++)
                if(a[i] == b[i])
                {
                    A++;
                    c[t]=i;
                    t++;
                }
            m=t-1;
            for(i=1; i<=n; i++)
            {


                   for(k=1; k<=m; k++)
                      if(i == c[k])
                          goto loop1;
                for(j=1; j<=n; j++)
                {
                    for(k=1; k<=m; k++)
                        if(j == c[k])
                            goto loop2;


                    if(a[i]==b[j]  && i!=j)
                    {
                        B++;
                        b[j]=0;
                        goto loop1;
                    }
                    loop2:  continue;
                }


                loop1: continue;


            }
            printf("    (%d,%d)\n",A,B);
        }


        loop3: continue;
    }
    return 0;
}

你可能感兴趣的:(UVa 340 - Master-Mind Hints)