首页 > 其他分享 >力扣-有效的井字游戏

力扣-有效的井字游戏

时间:2023-08-06 16:48:02浏览次数:35  
标签:字符 游戏 井字 xcount 玩家 力扣 ocount board

1.问题描述

用字符串数组作为井字游戏的游戏板 board。当且仅当在井字游戏过程中,玩家有可能将字符放置成游戏板所显示的状态时,才返回 true。

该游戏板是一个 3 x 3 数组,由字符 " ","X" 和 "O" 组成。字符 " " 代表一个空位。

以下是井字游戏的规则:

玩家轮流将字符放入空位(" ")中。

第一个玩家总是放字符 “X”,且第二个玩家总是放字符 “O”。

“X” 和 “O” 只允许放置在空位中,不允许对已放有字符的位置进行填充。

当有 3 个相同(且非空)的字符填充任何行、列或对角线时,游戏结束。

当所有位置非空时,也算为游戏结束。

如果游戏结束,玩家不允许再放置字符。

示例 1:

输入: board = ["O  ", "   ", "   "]

输出: false

解释: 第一个玩家总是放置“X”。

示例 2:

输入: board = ["XOX", " X ", "   "]

输出: false

解释: 玩家应该是轮流放置的。

示例 3:

输入: board = ["XXX", "   ", "OOO"]

输出: false

示例 4:

输入: board = ["XOX", "O O", "XOX"]

输出: true

2.说明:

游戏板 board 是长度为 3 的字符串数组,其中每个字符串 board[i] 的长度为 3。

 board[i][j] 是集合 {" ", "X", "O"} 中的一个字符。

 输入说明:输入三行,每行三个字符,每个字符都属于集合 {" ", "X", "O"} 

输出说明:输出结果:true或false

3.范例

输入:

XOX
O O
XOX

输出:

true

4.思路

根据象棋规则,第一个玩家总是放“X”,第二个玩家总是放“O”,因此游戏中的"X"数量一定大于等于"O"的数量;且不能存在两个获胜者,因此不可能出现3个“X”在同一行/列和3个“O”在同一行/列,因此若第一个玩家获胜,则一定是“X”数量比“O”数量多1个,而若第二玩家获胜,则“X”数量一定等于“O”的数量。

因此,在合法的象棋游戏上,只有三种结果:没有任何玩家获胜,第一玩家获胜,第二玩家获胜,可以通过检测两个玩家象棋数检验是否有效,同时需要检验两个玩家同时获胜的非法情况。

 

 

5.代码

#include <iostream>
#include <stdio.h>
#include <vector>
#include <string>
using namespace std;
class Solution
{
public:
    bool validTicTacToe(vector<string> &board)
    {
        int xcount=0,ocount=0;
        for(string &row:board)
            for(char c:row)
            {
                xcount = (c=='X')? (xcount+1):xcount;
                ocount = (c=='O')? (ocount+1):ocount;
            }
        return !((ocount!=xcount&&ocount!=xcount - 1)||//先放x,后放o,则x数量一定>o数量,符合规则的话,一定xcount-1==ocount
                 (ocount!=xcount-1&&win(board,'X'))||//若x赢,则ocount一定==xcount-1
                 (ocount!=xcount&&win(board,'O')));//若o赢,则ocount一定==xcount
    }
    bool win(vector<string> &board,char c)
    {
        for(int i=0;i<3;++i)
        {
            if((c==board[i][0]&&c==board[i][1]&&c==board[i][2])||  //行
               (c==board[0][i]&&c==board[1][i]&&c==board[2][i]))   //列
                return true;
        }
        return ((c==board[0][0]&&c==board[1][1]&&c==board[2][2])||//斜对角
                (c==board[0][2]&&c==board[1][1]&&c==board[2][0]));
    }
};
int main()
{
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
    vector<string> board;
    string aRow;
    for(int i=0; i<3; i++)
    {
        getline(cin,aRow);
        board.push_back(aRow);
    }
    bool res=Solution().validTicTacToe(board);
    cout<<(res?"true":"false")<<endl;
    return 0;
}

 

标签:字符,游戏,井字,xcount,玩家,力扣,ocount,board
From: https://www.cnblogs.com/ohye/p/17609533.html

相关文章

  • 记一次体验愉快的GameJam|上交复旦x72h极限游戏开发挑战赛
    太长不看版【上交复旦x72h极限游戏开发挑战赛作品《Colorful》宣传短片】 【腾讯×上交复旦72hgamejam极限游戏开发挑战赛作品《Colorful》全流程演示】 试玩demo下载链接:https://pan.baidu.com/s/1Xdksy97qF8Qac31H6nUGww 提取码:wmuq游戏简介:你说得对,但是《卡乐芙(col......
  • 【动态规划】【力扣357次周赛】6953. 判断是否能拆分数组
    【力扣357次周赛】6953.判断是否能拆分数组给你一个长度为n的数组nums和一个整数m。请你判断能否执行一系列操作,将数组拆分成n个非空数组。在每一步操作中,你可以选择一个长度至少为2的现有数组(之前步骤的结果)并将其拆分成2个子数组,而得到的每个子数组,至少需......
  • 代码随想录算法训练营第七天|力扣334.反转字符串、力扣541.反转字符串II、剑指offer05
    字符串反转字符串(力扣344.)如果题目关键的部分直接用库函数就可以解决,建议不要使用库函数。毕竟面试官一定不是考察你对库函数的熟悉程度,如果使用python和java的同学更需要注意这一点,因为python、java提供的库函数十分丰富。如果库函数仅仅是解题过程中的一小部分,并且......
  • 力扣-24. 两两交换链表中的节点
     题目:给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 =publicstaticListNodeswapPairs(ListNodehead){if(head==null||head.next==null)returnhead;......
  • 一支笔,一双手,一道力扣(Leetcode)做一宿
    (文章目录)一、分享自己相关的经历我是一名计算机专业的学生,之前在学习算法和数据结构时,对于简单题目还算能够顺利地刷过去。但是当我开始尝试刷一些medium难度的题目时,就感觉自己卡在原地了。明明看过题解,知道解题思路,但真正动手做题时,就觉得无从下手,甚至一道题目做了好几天都......
  • 关与井字游戏的实现
    基于C语言中,函数,循环,声明,时间戳等知识实现的井字游戏游戏规则:人与电脑下井字游戏,首先达成三连的获得游戏胜利 该图片为函数声明和需要使用的库函数ROWLIN是规定了游戏地图的大小下面三个库函数,第一个是用于打印等功能,第二和第三个共同构成时间戳使用简单代码实现的伪菜单,可以选择......
  • 代理IP:跨界电商和游戏产业的爬虫与出海之利器
    一、代理IP:简介与工作原理代理IP是一种通过中间服务器转发网络请求的技术,隐藏了用户的真实IP地址。在跨界电商和游戏产业中,代理IP充当着连接海外资源与用户的桥梁。代理IP的工作原理:当用户请求访问目标服务器时,请求首先经过代理服务器转发,代理服务器使用代理IP作为请求的源IP地址,将......
  • FPS游戏服务器设计的问题 转
    https://gwb.tencent.com/community/detail/109177FPS游戏服务器设计的问题转3.3k浏览一、追溯去gameloft笔试,有一个题目是说:叫你去设计一个FPS(第一人称射击游戏),你是要用TCP呢还是要用UDP,说明理由。二、学习这是两篇网上找到的文章,写非常不错。当时笔试的......
  • 俄乌战争中乌克兰的无人机、无人艇的临时操作手——善于玩电子游戏的高手——电玩高手
    看到一个新闻:凌晨450公斤炸弹命中,4000吨级俄军军舰剧烈爆炸:正在逐渐下沉 里面有这么一句话:乌克兰正在高中里搜索那些善于玩电子游戏的高手,让他们操作无人机和无人艇远程袭击俄罗斯目标。   -------------------------------------------------  一个设想:那就是......
  • 【定制项目】【M15 消防安全宣传】【横屏版】主要模块:视频 + 音频 + 图标 + 问答游戏
    之前客户指定要求竖屏版,所以只做了竖屏效果(项目管理箴言-做只做需要的工作,不要镀金),后来客户采购了一批横屏设备(毕竟横屏播放视频才是王道),所以代码升级支持横屏版。效果展示主页公益宣传片(视频MP4), 火灾启示录(视频MP4),消防宣教员(视频MP4),消防设施原理(视频MP4) 视频播放页-  自动......