题解 | #井字棋#

井字棋

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

int output(int val) {  //判断是否有三连棋
    if (val / 3 == 'K') {
        printf("KiKi wins!");
        val = 1;  //有则返回1,代表已打印结果
    } else if (val / 3 == 'B') {
        printf("BoBo wins!");
        val = 1;
    } else val = 0;  //返回0,代表无打印并初始化传入值
    return val;
}
int main() {
    char ch[3][3];
    //val1储存行列三连数的和,val2存储右斜对角三个数的值,val3储存左斜对角三个数的值
    int val1 = 0, val2 = 0, val3 = 0;
    for (int i = 0; i < 6; i++) {
        for (int j = 0; j < 3; j++) {
            if (i < 3 ) {
                scanf("%c ", &ch[i][j]); //依次行输入
                val1 += ch[i][j];  //计算同一行三个值的和
                if (j == 2) val1 = output(val1);  //三个都计算完成后判断
            } else if (i >= 3) {
                val1 += (int)ch[j][i - 3];  //计算同一列三个值的和
                if (j == 2) val1 = output(val1);
            }
            if (i < 3 && i == j) {
                val2 += ch[i][j];  //计算右斜对角三个数的和
                if (i + j == 4) val2 = output(val2);  //三个都计算完成后判断
            }
            if (i < 3 && i + j == 2) {
                val3 += (int)ch[i][j];  //计算左斜对角三个数的和
                if (i == 2) val3 = output(val3);  //三个都计算完成后判断
            }
        }
        //若已打印结果,结束循环
        if (val1 == 1 || val2 == 1 || val3 == 1) break;
        //若循环至最后一次还未打印结果,则代表无人获胜
        if (i == 5) printf("No winner!"); 
    }
    return 0;
}
全部评论

相关推荐

一名愚蠢的人类:多少games小鬼留下了羡慕的泪水
投递荣耀等公司10个岗位
点赞 评论 收藏
分享
2 收藏 评论
分享
牛客网
牛客企业服务