题解 P1917 【三子棋II】
引领天下
2017-08-18 13:57:48
这题呢,是一道水题,不过为什么没人做???
读入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;//输出棋子数
}
```