例题3-4 master-mind hints

下面先附上我的水货代码,,,,一会附上,,,刘大婶给的代码///////3ms

#include<stdio.h>
#include<string.h>
int main()
{
    int A,B,W=0,t,n,m,i,j,q,a[1111],b[1111],c[1111];
    while(scanf("%d",&t),t)
    {
        W++;
        printf("Game %d:\n",W);
        for(A=B=i=0;i<t;i++)
        {
            scanf("%d",&a[i]);
        }
        for(;;)
        {
            for(A=B=i=0;i<t;i++)
            {
                scanf("%d",&b[i]);
            }
            for(i=0;i<t;i++)
                c[i]=a[i];
            //strcpy(c,a);
            for(q=i=0;i<t;i++)
            {
                if(b[i]==0)
                    q++;
            }
            if(q==t)
                break;
            for(i=0;i<t;i++)
            {
                if(a[i]==b[i])
                    A++;              //这个是序号能对应上的  个数....
            }
            for(i=0;i<t;i++)           //原版是a[i].c[i]是原版的复制品...b[i]是猜测的
            {
                for(j=0;j<t;j++)
                {
                    if(c[i]==b[j])
                    {
                        c[i]=b[j]=-741258;
                        B++;
                        break;
                    }
                }
            }
            printf("    (%d,%d)\n",A,B-A);
        }
    }
}

 下面附上刘大婶的代码...相对来说人家的   又简单,时间复杂度又低

#include<stdio.h>
#define maxn 1010
int main()
{
    int A,B,i,n,d,a[maxn],b[maxn];
    int kase=0;
    while(scanf("%d",&n),n)
    {
        printf("Game %d:\n",++kase);
        for(i=0;i<n;i++)             //   这是需要猜的数组.
            scanf("%d",&a[i]);
        for(;;)    //汗,  这里和大婶想的挺像的.
        {
            A=B=0;
            for(i=0;i<n;i++)         //这是  你猜的数组
            {
                scanf("%d",&b[i]);
                if(a[i]==b[i])      //在输入的时候就顺便得到了对应位置相同的  数字.
                    A++;
            }
            if(b[0]==0)// 英文题目上已经说过.
                break;
            for(d=1;d<=9;d++)
            {
                int c1=0,c2=0;    //
                for(i=0;i<n;i++)
                {
                    if(a[i]==d)   //统计一下   需要被猜的数组里面 1的个数
                        c1++;    
                    if(b[i]==d)   //统计一下   猜测数列里1的个数.
                        c2++;
                }
                if(c1<c2)         //然后将   相同的 加起来
                {
                    B=B+c1;
                }
                else
                {
                    B=B+c2;
                }
            }
              printf("    (%d,%d)\n",A,B-A);
        }
    }
    return 0;
}

 

posted @ 2016-01-04 20:19  X-POWER  阅读(164)  评论(0编辑  收藏  举报