题解 P1917 【三子棋II】

引领天下

2017-08-18 13:57:48

Solution

这题呢,是一道水题,不过为什么没人做??? 读入9(3\*3)个字符,每个有3种情况: - '-' 表示该位置没有棋子; - 'O' 表示该位置为小a的棋子; - 'X' 表示该位置为uim的棋子。 那么,我就在线做,读入,如果这个地方有子,就检查,如果是'X',就看它所在行、列相差1,小a就赢了。 看这个图: ```cpp -K- KOK -K- ``` 其中K为行、列相差1的地方,如果这里有子,且总子数<4,小a先下,那么中心是小a(第一个子),4个K中的一个位置为uim的子,那么只要小a下在4脚处,那么他就赢了(自己想想) 所以只要4个K中的任意一个位置有uim的子,uim就输了。 不然输出不知道。 话说我忍不住要吐槽题目:不知道用英文说应该是"I don't know",然而。kkk告诉我们:英语不要主语,don't的写法是dont??还有说好的小a蠢呢??数据竟没有一个是uim赢。 好了不说废话了,上代码。 ```cpp #include<iostream> using namespace std; char a;//在线做,数组都不要。 int x,fl;//x为子的个数,fl是一个判断小a有没有赢的变量 inline int ab(int a){return a<0?-a:a;}//手写的绝对值函数 int main(){ for(int i=0;i<3;i++) for(int j=0;j<3;j++){ cin>>a; if(a!='-'){ x++;//a!='-'表示这里有子,+1个 if(a=='X'&&ab(i-j)==1)fl=1;//判断,如果i和j相差正好1,小a就赢了,标记一下 } } if(fl)cout<<"xiaoa will win.\n";//小a赢 else cout<<"Dont know.\n";//不知道 cout<<x;//输出棋子数 } ```