注册 登录
编程论坛 C语言论坛

洛谷三子棋

新的一天111 发布于 2023-01-24 17:59, 909 次点击
题目描述
小a和uim喜欢互相切磋三子棋。三子棋大家都玩过是吗?就是在九宫格里面OOXX(别想歪了),谁连成3个就赢了。

由于小a比较愚蠢,uim总是让他先。

我们用9个数字表示棋盘位置:

123 456 789 所有的棋谱都是已经结束的棋局,要么一方获胜,要么平局。

今天,他们下了一下午的棋,小a为了提高技术,录下了很多棋谱。他想知道,一盘棋结束时,到底是谁赢。

输入格式
一行,一串数字,表示落子的地点。小a总是先下

输出格式
一行,如果小a赢,输出“xiaoa wins.”。如果uim赢,输出“uim wins.”。如果平局,输出“drew.”
这道题的数据有一半过不过去,大家能不能帮我看看问题出在哪,谢谢
这是我的代码:
#include<stdio.h>
int main(){
    int i,j,k,a[20],b[20],flag=0,aa=0,bb=0,c=0,t=0;
    char ab;
    while((ab=getchar())!='\n'){
        flag++;
        if(flag%2==1){//奇数 小a
            a[aa]=ab-'0';
            aa++;//最后aa为数组a的元素个数
        }else{//偶数 uim
            b[bb]=ab-'0';
            bb++;//最后bb为数组b的元素个数
        }
    }
    for(i=0;i<aa;i++){
        for(j=0;j<aa;j++){
            for(k=0;k<aa;k++){
                if(i!=j&&j!=k&&i!=k){
                    if((a[j]==a[i]+3&&a[k]==a[j]+3)||(a[j]==a[i]+1&&a[k]==a[j]+1)||(a[j]==a[i]+4&&a[k]==a[j]+4)||(a[j]==a[i]+2&&a[k]==a[j]+2))  c=1;//竖着的横着的斜着的
                }
            }
        }
    }
    for(i=0;i<bb;i++){
        for(j=0;j<bb;j++){
            for(k=0;k<bb;k++){
                if(i!=j&&j!=k&&i!=k){
                    if((b[j]==b[i]+3&&b[k]==b[j]+3)||(b[j]==b[i]+1&&b[k]==b[j]+1)||(b[j]==b[i]+4&&b[k]==b[j]+4)||(b[j]==b[i]+2&&b[k]==b[j]+2))  t=1;//竖着的横着的斜着的
                }
            }
        }
    }
    if(c==1&&t==0)  printf("xiaoa wins.");
    if(c==0&&t==1)  printf("uim wins.");
    if(c==0&&t==0)  printf("drew.");
    return 0;
}
2 回复
#2
rjsp2023-01-26 11:37
题主不肯贴出完整的题目(缺 输入输出样例),我来做个好事
https://www.
#3
BPiug2023-02-20 19:03
回复 楼主 新的一天111
从理论上来讲,这么写是可以的。不知道是因为什么过不去,因为超时还是因为有错。
1