• 力扣练习——31 有效的井字游戏


    31 有效的井字游戏

    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

    说明:

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

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

    可使用以下main函数:

    int main()

    {

    vector 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")<
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    }

    2.输入说明
    输入三行,每行三个字符,每个字符都属于集合 {" ", “X”, “O”}
    3.输出说明
    输出结果:true或false
    4.范例
    输入
    XOX
    O O
    XOX
    输出
    true
    5.代码

    #include
    #include
    #include
    #include
    #include
    #include
    #include
    using namespace std;
    
    bool win(vector<string>&board, char p)
    {
    	//1.一行/列全为X或O情况
    	for (int i = 0; i < 3; i++)
    	{
    		if ((board[i][0] == p && board[i][1] == p && board[i][2] == p) || (board[0][i] == p && board[1][i] == p && board[2][i] == p))
    			return true;
    	}
    	//2.对角线情况
    	return ((board[0][0] == p && board[1][1] == p && board[2][2] == p) || (board[0][2] == p && board[1][1] == p && board[2][0] == p));
    }
    
    
    bool validTicTacToe(vector<string> board)
    {
    	//1.因为X总是比O先放,所以X个数肯定大于等于O个数  若第一个玩家赢,则X个数比O个数多1  ;若第二个玩家赢,则X和O个数相等
    	//2.不存在3个X在一行/列,同时  3个O在另一行/列
    
    	//1.计算x和0个数
    	int xcount = 0;
    	int ocount = 0;
    
    	for (string &row : board)//遍历每一行
    	{
    		for (char c : row)//遍历row行的每个元素
    		{
    			if (c == 'X')
    				xcount++;
    			if (c == 'O')
    				ocount++;
    		}
    	}
    
    	//2.判断是否正常   
    	//反证法
    	//只要其中一件情况存在,那返回的就是true ,最后取反输出结果就是false
    	return !(
    		   (ocount != xcount && ocount != xcount - 1)//O和X的个数不相等时,肯定要满足X个数比O个数大一
    		|| (ocount != xcount && win(board, 'O'))//O赢的话,X个数肯定要等于O个数
    		|| (ocount != xcount - 1 && win(board, 'X'))//X赢的话,X个数肯定要等于O个数加1
    		);
    
    }
    
    
     
    int main()
    
    {
    
    	vector<string> board;
    
    	string aRow;
    
    	for (int i = 0; i < 3; i++)
    
    	{
    
    		getline(cin, aRow);
    
    		board.push_back(aRow);
    
    	}
    
    	bool res = validTicTacToe(board);
    
    	cout << (res ? "true" : "false") << endl;
    
    
    
    	return 0;
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
  • 相关阅读:
    这15个大模型LLM最新研究成果很有看点
    第二章:Qt下载与安装 之 2.2 Qt安装
    华为要用MateBook E Go系列开辟一个新市场
    VM虚拟机连接NAT虚拟网络并上网的总结
    怎么看电脑配置?电脑配置好不好?详细教程来了!
    工业物联网网关在机房动力环境监控系统有何作用?
    BGP学习笔记
    编译tolua——3、以pbc为例子,添加第三方库
    微信小程序---分包加载
    HTMLDOM中的API之btoa和atob
  • 原文地址:https://blog.csdn.net/qq_43403657/article/details/125889086