习题4-3 UVA220黑白棋(WA)

2019-8-25

这道题一直在WA,没有通过,先占个坑,日后再改。

附WA代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char a[10][10];
int black[65];
int white[65];
char c,myplayer;
int n,i,j,bi,wi;
char s[5];
int canset[65];
int id;
//左右上下   左上 左下 右上 右下
int dir[8][2]={{0,-1},{0,1},{-1,0},{1,0},{-1,-1},{1,-1},{-1,1},{1,1}};
int book[9][9];
char player[2];
void tongji();
void operate();
int main()
{
    player[0]='W';
    player[1]='B';
    cin>>n;
    getchar();
    memset(a,0,sizeof(a));
    for(int w=0;w<n;w++)
    {
        for(i=1;i<=8;i++)
        {
            j=1;
            while((c=getchar())!='\n')
            {
                a[i][j++]=c;
            }
        }
        cin>>myplayer;
        if(myplayer=='W'){id=0;}
        else {id=1;}
        while(cin>>s)
        {
            if(!strcmp(s,"Q"))
            {
                for(i=1;i<=8;i++)
                {for(j=1;j<=8;j++)
                {
                    cout<<a[i][j];
                }
                cout<<endl;
                }
                if(w!=n-1)
                {cout<<endl;}
                break;
            }
            else
            {
                operate();
            }
        }
        getchar();
    }
    return 0;
}
void tongji()
{

    memset(white,0,sizeof(white));
    memset(black,0,sizeof(black));
    wi=0;
    bi=0;
    for(int x1=1;x1<=8;x1++)
        for(int x2=1;x2<=8;x2++)
    {
        if(a[x1][x2]=='W')
        {
            white[wi++]=(x1-1)*8+x2;
        }
        if(a[x1][x2]=='B')
        {
            black[bi++]=(x1-1)*8+x2;
        }
    }
}
void operate()
{
    int newx,newy;
    int setx,sety;
    int d;
    int tim;
    int num=0;
    int flag;
    int numblack;
    int numwhite;
    int var;
    memset(canset,0,sizeof(canset));
    memset(book,0,sizeof(book));
    d=0;
    tongji();
    for(int k=0;;k++)
    {
        if(id==0){var=white[k];}
        else {var=black[k];}
        if(var==0){break;}
        for(int b=0;b<8;b++)
        {
            tim=0;
            newx=(var-1)/8+1;
            newy=var-8*(newx-1);
            while(1)
            {
                newx=newx+dir[b][0];
                newy=newy+dir[b][1];
                tim++;
                if(newx<=0||newx>=9||newy<=0||newy>=9)
                {
                    break;
                }
                if(book[newx][newy]){break;}
                if(a[newx][newy]==player[id]||((a[newx][newy]=='-')&&tim==1))
                {
                    break;
                }
                else if((a[newx][newy]=='-'))
                {
                    canset[d++]=(newx-1)*8+newy;
                    book[newx][newy]=1;
                    break;
                }
            }
        }
    }
    if(!strcmp(s,"L"))
    {
        if(d==0)
        {
            cout<<"No legal move."<<endl;
        }
        else{
        sort(canset,canset+65);
        for(int e=0;;e++)
        {
            if(canset[e]!=0)
            {
                num++;
                if(num==1)
                {
                    cout<<"("<<((canset[e]-1)/8+1)<<","<<(canset[e]-((canset[e]-1)/8)*8)<<")";
                }
                else
                {
                    cout<<" ("<<((canset[e]-1)/8+1)<<","<<(canset[e]-((canset[e]-1)/8)*8)<<")";
                }
            }
            if(num==d)
            {
                break;
            }
        }
        cout<<endl;
        }
    }
    else if(s[0]=='M')
    {
        setx=s[1]-'0';
        sety=s[2]-'0';
        if(!book[setx][sety])
        {
            id=1-id;
        }
        a[setx][sety]=player[id];
        for(int b=0;b<8;b++)
        {
            tim=0;
            flag=0;
            newx=setx;
            newy=sety;
            while(1)
            {
                newx=newx+dir[b][0];
                newy=newy+dir[b][1];
                tim++;
                if(newx<=0||newx>=9||newy<=0||newy>=9)
                {
                    break;
                }
                if(a[newx][newy]=='-'&&tim==1)
                {
                    break;
                }
                if(a[newx][newy]==player[id])
                {
                    flag=1;
                    break;
                }
            }
            if(flag==1)
            {
                newx=setx;
                newy=sety;
                while(1)
                {
                    newx=newx+dir[b][0];
                    newy=newy+dir[b][1];
                    if(newx<=0||newx>=9||newy<=0||newy>=9)
                    {
                        break;
                    }
                    if(a[newx][newy]==player[id])
                    {
                        break;
                    }
                    else
                    {
                        a[newx][newy]=player[id];
                    }
                }
            }
       }
       id=1-id;
       numblack=0;
       numwhite=0;
       for(int ma=1;ma<=8;ma++)
        for(int col=1;col<=8;col++)
        {
        if(a[ma][col]=='B')
            {
                numblack++;
            }
        if(a[ma][col]=='W')
            {
                numwhite++;
            }
        }
        printf("Black -%3d White -%3d\n",numblack,numwhite);
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
牙科就诊管理系统利用当下成熟完善的SSM框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的Mysql数据库进行程序开发。实现了用户在线查看数据。管理员管理病例管理、字典管理、公告管理、药单管理、药品管理、药品收藏管理、药品评价管理、药品订单管理、牙医管理、牙医收藏管理、牙医评价管理、牙医挂号管理、用户管理、管理员管理等功能。牙科就诊管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 管理员在后台主要管理病例管理、字典管理、公告管理、药单管理、药品管理、药品收藏管理、药品评价管理、药品订单管理、牙医管理、牙医收藏管理、牙医评价管理、牙医挂号管理、用户管理、管理员管理等。 牙医列表页面,此页面提供给管理员的功能有:查看牙医、新增牙医、修改牙医、删除牙医等。公告信息管理页面提供的功能操作有:新增公告,修改公告,删除公告操作。公告类型管理页面显示所有公告类型,在此页面既可以让管理员添加新的公告信息类型,也能对已有的公告类型信息执行编辑更新,失效的公告类型信息也能让管理员快速删除。药品管理页面,此页面提供给管理员的功能有:新增药品,修改药品,删除药品。药品类型管理页面,此页面提供给管理员的功能有:新增药品类型,修改药品类型,删除药品类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值