zoukankan      html  css  js  c++  java
  • Codeforces 3C

    C. Tic-tac-toe

    time limit per test
    1 second
    memory limit per test
    64 megabytes
    input
    standard input
    output
    standard output

    Certainly, everyone is familiar with tic-tac-toe game. The rules are very simple indeed. Two players take turns marking the cells in a 3 × 3grid (one player always draws crosses, the other — noughts). The player who succeeds first in placing three of his marks in a horizontal, vertical or diagonal line wins, and the game is finished. The player who draws crosses goes first. If the grid is filled, but neither Xs, nor 0s form the required line, a draw is announced.

    You are given a 3 × 3 grid, each grid cell is empty, or occupied by a cross or a nought. You have to find the player (first or second), whose turn is next, or print one of the verdicts below:

    • illegal — if the given board layout can't appear during a valid game;
    • the first player won — if in the given board layout the first player has just won;
    • the second player won — if in the given board layout the second player has just won;
    • draw — if the given board layout has just let to a draw.
    Input

    The input consists of three lines, each of the lines contains characters ".", "X" or "0" (a period, a capital letter X, or a digit zero).

    Output

    Print one of the six verdicts: first, second, illegal, the first player won, the second player won or draw.

    Examples
    input
    X0X
    .0.
    .X.
    output
    second

    题意:给出一个井字棋棋盘,第一个人画X,第二个人画0,“.”表示该位置还没有画。两人轮流画,谁先画出一行,一列,或一对角线就算赢。判断棋盘的情况并输出,可能出现的情况有6种,分别是:illegal(棋盘不合法),the first player won(第一个人赢),the second player won(第二个人赢),draw(棋盘画满),first(轮到第一个人下了),second(轮到第二个人下了)。

    题解:模拟。按照给出的棋盘和定义直接模拟即可。但是这题考虑的情况比较多,容易被hack,必须全面考虑,具体的参见代码最后的if判断就是此题全部的分类讨论情况。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 string s[3];
     4 int X,O;
     5 bool win1,win2;
     6 bool solve(char c)
     7 {
     8     for (int i=0;i<3;++i)
     9     {
    10         bool win=1;
    11         for (int j=0;j<3;++j)
    12         if (s[i][j]!=c)
    13         {
    14             win=0;
    15             break;
    16         }
    17         if (win) return 1;
    18     }
    19     for (int i=0;i<3;++i)
    20     {
    21         bool win=1;
    22         for (int j=0;j<3;++j)
    23         if (s[j][i]!=c)
    24         {
    25             win=0;
    26             break;
    27         }
    28         if (win) return 1;
    29     }
    30     if (s[0][0]==c&&s[1][1]==c&&s[2][2]==c) return 1;
    31     if (s[0][2]==c&&s[1][1]==c&&s[2][0]==c) return 1;
    32     return 0;
    33 }
    34 int main()
    35 {
    36     for (int i=0;i<3;++i)
    37     cin>>s[i];
    38     for (int i=0;i<3;++i)
    39     for (int j=0;j<3;++j)
    40     if (s[i][j]=='X') ++X;
    41     else if (s[i][j]=='0') ++O;
    42     win1=solve('X');
    43     win2=solve('0');
    44     if (win1&&win2) return puts("illegal"),0;
    45     if (win1&&X-O!=1) return puts("illegal"),0;
    46     if (win2&&X!=O) return puts("illegal"),0;
    47     if (X-O>1||O>X) return puts("illegal"),0;
    48     if (win1) return puts("the first player won"),0;
    49     if (win2) return puts("the second player won"),0;
    50     if (X+O==9) return puts("draw"),0;
    51     if (X==O) return puts("first"),0;
    52     if (X>O) return puts("second"),0;
    53 }
    View Code
  • 相关阅读:
    自定义tabbar
    数据存储: sqlite,coredata plist 归档
    分享(微信,微博,人人)
    OAuth协议与第三方登录:(QQ,百度,微信,微博)
    修改后台来测试APP的方法
    mysql 数据库优化之路
    tcp协议在定位中的应用(2)
    tcp协议在定位中的应用
    计算机术语中一些歧义
    网络常见问题背后的原因
  • 原文地址:https://www.cnblogs.com/zk1431043937/p/7587751.html
Copyright © 2011-2022 走看看