Problem L Tic-Tac-Toe

Accept: 94    Submit: 184
Time Limit: 1000 mSec    Memory Limit : 262144 KB

 Problem Description

Kim likes to play Tic-Tac-Toe.

Given a current state, and now Kim is going to take his next move. Please tell Kim if he can win the game in next 2 moves if both player are clever enough.

Here “next 2 moves” means Kim’s 2 move. (Kim move,opponent move, Kim move, stop).

Game rules:

Tic-tac-toe (also known as noughts and crosses or Xs and Os) is a paper-and-pencil game for two players, X and O, who take turns marking the spaces in a 3×3 grid. The player who succeeds in placing three of their marks in a horizontal, vertical, or diagonal row wins the game.

 Input

First line contains an integer T (1 ≤ T ≤ 10), represents there are T test cases.

For each test case: Each test case contains three lines, each line three string(“o” or “x” or “.”)(All lower case letters.)

x means here is a x

o means here is a o

. means here is a blank place.

Next line a string (“o” or “x”) means Kim is (“o” or “x”) and he is going to take his next move.

 Output

For each test case:

If Kim can win in 2 steps, output “Kim win!”

Otherwise output “Cannot win!”

 Sample Input

3
. . .
. . .
. . .
o
o x o
o . x
x x o
x
o x .
. o .
. . x
o

 Sample Output

Cannot win!
Kim win!
Kim win!

九宫棋Kim先下两步之内是否可以胜利

题解下次贴

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <cmath>
using namespace std;
char map[][];
int s[][],t,sum,k,cnt;
bool judge(int x,int y){
if((x+y)%==){//当此时这个格子的行列的和为奇数时
cnt=,sum=; //cnt代表可能胜利的次数
for(int i=;i<=;i++){
sum+=s[i][y];
}
sum*=k; //同是负数相乘为正数
if(sum==) //空白数为2时代表可以
return true;
else if(sum==) //当sum和为1时,此时可能胜利
cnt++;
sum=; //注意,此时一定要重置sum,因为sum在这个函数的前面后面的含义不同
for(int i=;i<=;i++){
sum+=s[x][i];//计算此时画相同的符号的个数之和
}
sum*=k;
if(sum==) //如果画相同符号的和为2,代表画下一个一定会胜利
return true;
else if(sum==) //如果此时画的相同的符合为1,代表可能胜利
cnt++;
if(cnt==){ //当可能胜利的次数超过2时一定可以胜利
return true;
}
}
else { //当此时这个各自的行列的和为偶数时
cnt=,sum=;
for(int i=;i<=;i++){
sum+=s[i][y];
}
sum*=k;
if(sum==)
return true;
else if(sum==)
cnt++;
sum=;
for(int i=;i<=;i++){
sum+=s[x][i];
}
sum*=k;
if(sum==)
return true;
else if(sum==)
cnt++;
sum=;
if(x==y){ //代表这个空白所在的地方在斜线上
for(int i=;i<=;i++){
sum+=s[i][i];
}
sum*=k; if(sum==)
return true;
else if(sum==)
cnt++;
}
else {
for(int i=;i<=;i++){
sum+=s[i][-i];
}
sum*=k; if(sum==)
return true;
else if(sum==)
cnt++;
}
if(cnt>=){
return true;
}
}
return false;
} int main(){
char st;
int flag;
scanf("%d",&t);
while(t--){
flag=;
memset(s,,sizeof());
for(int i=;i<=;i++){
for(int j=;j<=;j++){
cin>>map[i][j];
if(map[i][j]=='.') s[i][j]=;
else if(map[i][j]=='o') s[i][j]=;
else if(map[i][j]=='x') s[i][j]=-;
}
}
cin>>st; //代表此时Kim所用的符号
if(st=='o') k=;
else if (st=='x') k=-;
for(int i=;i<=;i++){
for(int j=;j<=;j++){
if(map[i][j]=='.'){
if(judge(i,j))
flag=;
}
}
}
if(flag) puts("Kim win!");
else puts("Cannot win!");
}
return ;
}

FZU Tic-Tac-Toe -.- FZU邀请赛 FZU 2283的更多相关文章

  1. Principle of Computing (Python)学习笔记(7) DFS Search + Tic Tac Toe use MiniMax Stratedy

    1. Trees Tree is a recursive structure. 1.1 math nodes https://class.coursera.org/principlescomputin ...

  2. POJ 2361 Tic Tac Toe

    题目:给定一个3*3的矩阵,是一个井字过三关游戏.开始为X先走,问你这个是不是一个合法的游戏.也就是,现在这种情况,能不能出现.如果有人赢了,那应该立即停止.那么可以知道X的步数和O的步数应该满足x= ...

  3. 【leetcode】1275. Find Winner on a Tic Tac Toe Game

    题目如下: Tic-tac-toe is played by two players A and B on a 3 x 3 grid. Here are the rules of Tic-Tac-To ...

  4. 2019 GDUT Rating Contest III : Problem C. Team Tic Tac Toe

    题面: C. Team Tic Tac Toe Input file: standard input Output file: standard output Time limit: 1 second M ...

  5. [CareerCup] 17.2 Tic Tac Toe 井字棋游戏

    17.2 Design an algorithm to figure out if someone has won a game oftic-tac-toe. 这道题让我们判断玩家是否能赢井字棋游戏, ...

  6. Epic - Tic Tac Toe

    N*N matrix is given with input red or black.You can move horizontally, vertically or diagonally. If ...

  7. python 井字棋(Tic Tac Toe)

    说明 用python实现了井字棋,整个框架是本人自己构思的,自认为比较满意.另外,90%+的代码也是本人逐字逐句敲的. minimax算法还没完全理解,所以参考了这里的代码,并作了修改. 特点 可以选 ...

  8. ACM-Team Tic Tac Toe

    我的代码: #include <bits/stdc++.h> using namespace std; int main() { char a[3][3]; int i,j=0; for( ...

  9. LeetCode 5275. 找出井字棋的获胜者 Find Winner on a Tic Tac Toe Game

    地址 https://www.acwing.com/solution/LeetCode/content/6670/ 题目描述A 和 B 在一个 3 x 3 的网格上玩井字棋. 井字棋游戏的规则如下: ...

随机推荐

  1. LeetCode刷题总结之双指针法

    Leetcode刷题总结 目前已经刷了50道题,从零开始刷题学到了很多精妙的解法和深刻的思想,因此想按方法对写过的题做一个总结 双指针法 双指针法有时也叫快慢指针,在数组里是用两个整型值代表下标,在链 ...

  2. No!No!No! It's not fashion!

    还记得搞怪的hold住姐Miss Lin么,对于人们常规的行为,Miss Lin会挑起夸张的眉毛说:"Oh my God, it's not fashion!".如果程序员圈子里有 ...

  3. 【0725 | Day 1】计算机编程/计算机组成原理/计算机操作系统

    什么是编程 编程语言:人与计算机交流的手段 编程:通过编程语言编写文件 学习编程的目的:让计算机代替人力,为我们服务 计算机组成原理 计算机由五大部分组成:控制器.运算器.存储器.输入设备.输出设备. ...

  4. 轻量级移动端类库,大小20多k,支持多指触摸。

    /* * 移动端 公共类库 * 作者:hqs */ (function(global, factory) { // cmd commonjs if (typeof module === "o ...

  5. Markdown转载

    @TOC 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页.如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown ...

  6. Vue创建项目配置

    前言 安装VS Code,开始vue的学习及编程,但是总是遇到各种各样的错误,控制台语法错误,格式错误.一股脑的袭来,感觉创建个项目怎么这个麻烦.这里就讲一下vue的安装及创建. 安装环境 当然第一步 ...

  7. threejs 学习之

    主要内容: 使用 threejs 创建 20x20 的网格,鼠标移动时,方块跟随移动,点击时在网格任意位置放置方块,按 shift 时,删除当前位置方块. 流程如下: 创建网格 创建一个与网格同样尺寸 ...

  8. 干货 | Elasticsearch、Kibana数据导出实战

    1.问题引出 以下两个导出问题来自Elastic中文社区. 问题1.kibana怎么导出查询数据? 问题2:elasticsearch数据导出 就像数据库数据导出一样,elasticsearch可以么 ...

  9. LoRaWAN Server开源项目部署

    1,安装MQTT broker,Redis,PostgreSQL sudo apt install mosquitto mosquitto-clients redis-server redis-too ...

  10. 12-Factor,构建原生软件应用方法论

    官方地址:https://12factor.net/zh_cn/ 原则1:一份基准代码,多份部署 这个原则不管对微服务模式还是其他软件开发模式来说都非常基本,所以被列为12原则的第一条,该原则包括如下 ...