先取不败游戏

 

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void main()
{
    int j,k,n,a,b,t,c[1000],d[1000];
    a=b=0;
    t=time(0)%1000;
    srand(t);
    printf("序列中2n个整数,请确定n:");
    scanf("%d",&n);
    for(j=1;j<=2*n;j++)
    {
        c[j]=rand()%(2*n)+2;
        d[j]=c[j];
    }
    printf("序列的%d个整数以产生,每次只显示两端整数。\n",2*n);
    printf("A先取,A,B轮流取,直至取完。\n");
    for(k=1;k<=2*n;k++)
    {
        if(k<2*n)
            printf("\n  两端数为:%2d,%2d",d[k],d[2*n]);
        else
            printf("\n  只剩下一个数:%2d",d[2*n]);
        if(k%2==1)
        {
            t=d[k];
            if(t<d[2*n])
            {
                t=d[2*n];
                for(j=2*n;j>=k+1;j--)
                    d[j]=d[j-1];
            }
            a=b+t;
            printf("  A取数:%2d",t);
        }
        else
        {
            printf("  B取数:");
            scanf("%d",&t);
            if(t==d[k]||t==d[2*n])
            {
                b=b+t;
                if(t==d[2*n])
                {
                    for(j=2*n;j>=k+1;j--)
                        d[j]=d[j-1];
                }
            }
            else
            {
                printf("  A取数有错误,重新开始!");
                return;
            }
        }
    }
    printf("  原序列的%d个整数为:",2*n);
    for(j=1;j<=2*n;j++)
        printf("  %d",c[j]);
    printf("\n  最后得分为A=%d,B=%d",a,b);
    if(a>b)
        printf("\n  此游戏A胜!\n");
    else if(a<b)
        printf("\n  此游戏B胜!\n");
    else
        printf("\n  此游戏A,B平手!\n");
}

 

 

posted on 2018-01-04 23:53  小星_log  阅读(135)  评论(0编辑  收藏  举报