井字棋算法

井字棋

http://www.nowcoder.com/questionTerminal/0375c1d206ef48a3894f72aa07b2fdde

只需要知道第一个棋子与第二个棋子的相对位置差就好了,然后根据这个位置差来第二个以后所有的棋子,而不是用暴力列举法。

#include <iostream>
using namespace std;
int main(){
    char chess[3][3];
    bool k=false,b=false;
    int prok[2]={-1,-1},prob[2]={-1,-1},rk=0,ck=0,rb=0,cb=0;
    for(int i=0;i<3;i++){
        cin>>chess[i][0]>>chess[i][1]>>chess[i][2];
    }

    for (int row=0;row<3;row++){
       for(int col=0;col<3;col++){
            if(chess[row][col]=='K'){
                if(prok[0]==-1){
                    prok[0]=row;
                    prok[1]=col;
                }
                else{
                    rk = row-prok[0];
                    ck = col-prok[1];
                    if (chess[row+rk][col+ck]=='K') {k=true;break;}
                  }
            }
            else if(chess[row][col]=='B'){
                if(prob[0]==-1){
                    prob[0]=row;
                    prob[1]=col;
                }
                else {
                    rb=row-prob[0];
                    cb=col-prob[1];
                    if(chess[row+rb][col+cb]=='B') {b=true;break;}
                }
            }
        } 
    }

    if(k) cout<<"KiKi wins!"<<endl;
    else if(b) cout<<"BoBo wins!"<<endl;
    else cout<<"No winner!"<<endl;
    return 0;
}
全部评论
测试了一下 结果不对吧 虽然能通过
点赞 回复 分享
发布于 2021-05-17 09:53
代码是错的 K B K B K B K B B 这种情况按照上面的逻辑,理论上就判断不出来,因为pork固定是第一个了
点赞 回复 分享
发布于 2023-02-06 23:15 福建

相关推荐

评论
4
收藏
分享
牛客网
牛客企业服务