Moderate 判断井字游戏的胜利 @CareerCup

Leetcode做题笔记 面试题 16.04. 井字游戏 题目描述 设计一个算法,判断玩家是否赢了井字游戏。输入是一个 N x N 的数组棋盘,由字符" ",“X"和"O"组成,其中字符” "代表一个空位。 以下是井字游戏的规则: 玩家轮流将字符放入空位(" “)中。 第一个玩家总是放字符"O”,且第二个玩家总是放字符"X"。 "X"和"O"只允许放置在空位中,不允许对已放有字符的位置进行填充。 当有N个相同(且非空)的字符填充任何行、列或对角线时,游戏结束,对应该字符的玩家获胜。 当所有位置非空时,也算为游戏结束。 如果游戏结束,玩家不允许再放置字符。 如果游戏 阅读详情

基于要查找的次数来决定是否要预处理。预处理方式按照3进制来做。

另外,检查是否赢了要判断横行,纵列,正反对角线



package Moderate;

/**
 * Design an algorithm to figure out if someone has won in a game of tic-tac-toe.

译文:

设计算法检查某人是否赢得了井字游戏。 
 *
 */
public class S17_2 {

	// 方法一:如果HasWon函数需要被频繁调用
	public static int convertBoardToInt(char[][] board) {
        int factor = 1;
        int sum = 0;
        for (int i = 0; i < board.length; i++) {
                for (int j = 0; j < board[i].length; j++) {
                        int v = 0;
                        switch(board[i][j]){
	                        case 'x':
	                        	v = 1;
	                        	break;
	                        case 'o':
	                        	v = 2;
	                        	break;
                        	default:
                        		v = 0;
                        }
                        
                        sum += v * factor;
                        factor *= 3;
                }
        }
        return sum;
	}
	
	
	// 方法二:如果HasWon函数只被调用一次或很少次
	public static char hasWon(char[][] board){
		int type = 0;
		int N = board.length;
		
		int i, j;
		
		// 对每一行都检查
		for(i=0; i<N; i++){
			if(board[i][0] != ' '){
				for(j=1; j<N; j++){
					if(board[i][j] != board[i][j-1]){
						break;
					}
				}
				if(j == N){
					return board[i][0];
				}
			}
		}
		
		
		// 对每一列都检查
		for(j=0; j<N; j++){
			if(board[0][j] != ' '){
				for(i=1; i<N; i++){
					if(board[i][j] != board[i-1][j]){
						break;
					}
				}
				if(i == N){
					return board[0][j];
				}
			}
		}
		
		// 正对角线检查(左上到右下)
		if(board[0][0] != ' '){
			for(i=1; i<N; i++){
				if(board[i][i] != board[i-1][i-1]){
					break;
				}
			}
			if(i == N){
				return board[0][0];
			}
		}
		
		// 逆对角线检查(左下到右上)
		if(board[N-1][0] != ' '){
			for(i=1; i<N; i++){
				if(board[N-i-1][i] != board[N-i][i-1]){
					break;
				}
			}
			if(i == N){
				return board[N-1][0];
			}
		}
		
		return ' ';
	}



	public static void main(String[] args) {
	        char[][] board = {
	                        {'x', 'x', 'o'},
	                        {' ', 'x', ' '},
	                        {' ', ' ', 'x'}};
	        
	        int v = convertBoardToInt(board);
	        System.out.println(v);
	        
	        char result = hasWon(board);
	        if(result == ' '){
	        	System.out.println("No one won!");
	        }else{
	        	System.out.println(result + " has won");
	        }
	        
	}

}


Java井字游戏代码 用java&javafx;写的九宫格的井字游戏,有足够的代码解释 立即下载

相关推荐

java语言实现井字游戏

很简单的一个井字游戏,通过键盘输入相应位置,可能真的太过于简单了(也不能对战) 只能判断是否胜利以及落子判定 以后可能会修改(大概吧)

Java实现 LeetCode 794 有效的井字游戏 (暴力分析)

794. 有效的井字游戏 用字符串数组作为井字游戏的游戏板 board。当且仅当在井字游戏过程中,玩家有可能将字符放置成游戏...

5714

Java 井字游戏.rar

创建一个玩井字游戏的程序。程序提示两个玩家交替输入 X 和 O 标记。当输入一个标记时,程序在控制台上重新显示棋盘,然后确定游戏的状态(是获胜、平局还是继续)。

算法015:井字游戏-设计一个算法,判断玩家是否赢了井字游戏。输入是一个 N x N 的数组棋盘,由字符“ “,“X“和“O“组成,其中字符“ “代表一个空位。

题目: 井字游戏 设计一个算法,判断玩家是否赢了井字游戏。输入是一个 N x N 的数组棋盘,由字符" ","X"和"O"组成,其中字符" "代表一个空位。 以下是井字游戏的规则: 玩家轮流将字符放入空位(" ")中。 第一个玩家总是放字符"O",且第二个玩家总是放字符"X"。 "X"和"O"只允许放置在空位中,不允许对已放有字符的位置进行填充。 当有N个相同(且非空)的字符填充任何行、列或对角线时,游戏结束,对应该字符的玩家获胜。 当所有位置非空时,也算为游戏结束。 如果游戏结束,玩家不允许再放置字符

前路无畏的博客 1万+

井字棋java

极大极小算法人机对战,可以轻松改成C语言或者嵌入网页

量化实战:如何用Barra多因子模型给你的投资组合做一次‘风险体检’?

本文详细介绍了如何利用Barra多因子模型对投资组合进行全面的风险体检,帮助投资者识别行业和风格因子的风险暴露。通过实战案例和Python代码示例,展示了数据采集、风险归因和组合优化的完整流程,提升投资组合的风险调整收益。

weixin_27215337的博客 323

Leetcode--Java--794. 有效的井字游戏

题目描述 用字符串数组作为井字游戏的游戏板 board。当且仅当在井字游戏过程中,玩家有可能将字符放置成游戏板所显示的状态时,才返回 true。 该游戏板是一个 3 x 3 数组,由字符 " ",“X” 和 “O” 组成。字符 " " 代表一个空位。 以下是井字游戏的规则: 第一个玩家总是放字符 “X”,且第二个玩家总是放字符 “O”。 “X” 和 “O” 只允许放置在空位中,不允许对已放有字符的位置进行填充。 当有 3 个相同(且非空)的字符填充任何行、列或对角线时,游戏结束。 样例描述 示例 1: 输入

Sherlock的博客 3324

双击文件夹弹窗“找不到应用程序”,但是右键点击打开可以

此电脑、回收站、c、d、f盘、控制面板、任意文件夹等都没有办法双击打开。 右键中包含“使用filemanager打开”,是由于FileManager卸载残留导致的。 懒人专用附件 下载解压上面附件,双击导入可以清理FileManager软件残留 参考: 双击此电脑出现找不到应用程序,但是右键点击可以-其他-优快云问答https://ask.youkuaiyun.com/questions/7631439 电脑上的文件夹双击都提示找不到应用程序,但是右击打开就能打开,该怎么解决? - 知乎 (z

webmasterqpwou的博客 1万+

【程序员面试金典】面试题 16.04. 井字游戏

【程序员面试金典】面试题 16.04. 井字游戏

❀雾里看花花里看雾❀ 443

StarUML最新版汉化与破解二合一教程:5分钟搞定永久使用

本文提供StarUML最新版的高效使用指南,涵盖从安装到深度定制的全流程优化方案。包括软件获取最佳实践、界面个性化设置、核心建模技巧、团队协作策略及性能优化建议,帮助架构师和开发团队提升UML建模效率。特别推荐版本控制集成和文档自动化输出方案,适用于各类规模的项目开发。

weixin_42530732的博客 450

Rocky Linux 9 离线环境Docker部署实战:从依赖打包到服务启动

本文提供了一份详尽的Rocky Linux 9离线环境Docker部署实战指南。针对无法访问外网的生产或内网服务器,文章详细讲解了如何在联网跳板机上下载Docker二进制包及所有系统依赖RPM包,并完成打包。随后,手把手指导在离线服务器上进行依赖安装、二进制文件部署、systemd服务配置、SELinux与防火墙调优,最终实现Docker服务的成功启动与验证。

weixin_28363123的博客 138

Java入门-系列开发游戏-井字棋

通过对井字游戏的开发,熟悉Java中多线程的用法、掌握Java中的网络编程、深入理解Java中数组、方法等语法知识。

SAP NetWeaver Business Client (NWBC) 的深入解析

SAP NetWeaver Business Client(NWBC)作为 SAP 提供的一种用户界面,旨在为终端用户提供无缝集成传统 SAP GUI 事务和新开发的基于 Web Dynpro ABAP 的应用程序的体验。SAP NetWeaver Business Client(NWBC)是 SAP 推出的用户界面,旨在为终端用户提供单一入口,集成传统的 SAP GUI 事务和新开发的基于 Web Dynpro ABAP 的应用程序。在实际业务场景中,NWBC 的应用提升了用户的工作效率和体验。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1603

程序员面试金典——解题总结: 9.17中等难题 17.2判断井字游戏中某个玩家是否赢了游戏

#include #include #include using namespace std; /* 问题:设计一个算法,判断玩家是否赢了井字游戏 分析:首先井字游戏是跟五子棋类似,任意连线上有三个子就算成功 现在是判断某个玩家是否赢了游戏。 赢: 1) 任意一行3个连续的子 2) 列 3) 斜线 最简单的方法就是:每次轮到某

qingyuanluofeng的专栏 2134

第二天 原来Labview语言结构也挺自然(2.1 顺序结构)

新建项目文件StructureTest.lvproj,新建四个子VI(FlatSequence.vi、CaseStructure.vi、LoopStructure.vi、EventStructure.vi),具体新建流程可以参考1.2节。

weixin_38637405的博客 1003

Android Framework WMS面试题及参考答案

什么是 WindowManagerService(WMS)?它的作用是什么? WindowManagerService(WMS)是 Android 系统中非常重要的一个系统服务。它运行在系统进程(system_server 进程)中。 从本质上来说,WMS 是 Android 窗口管理系统的核心。它负责管理系统中的所有窗口,包括应用程序窗口、系统窗口(如状态栏、导航栏)等。 它的主要作用有很多。首先是窗口的创建和销毁。当一个应用请求创建一个窗口时,WMS 会协调各个模块完成窗口的创建工

大模型大数据攻城狮的专栏 2163

力扣 井字游戏

面试题 16.04. 井字游戏 难度中等6收藏分享切换为英文关注反馈 设计一个算法,判断玩家是否赢了井字游戏。输入是一个 N x N 的数组棋盘,由字符" ","X"和"O"组成,其中字符" "代表一个空位。 以下是井字游戏的规则: 玩家轮流将字符放入空位(" ")中。 第一个玩家总是放字符"O",且第二个玩家总是放字符"X"。 "X"和"O"只允许放置在空位中,不允许对已放有字符的位置进行填充。 当有N个相同(且非空)的字符填充任何行、列或对角线时,游戏结束,对应该字符的玩家获胜。 当所有

qq_41723573的博客 3543

2026 企查查/天眼查:IP频率限制 + 验证码策略,企业工商数据采集实战

企业工商数据采集技术解析与解决方案 本文深度剖析了2026年企查查和天眼查平台的反爬机制与技术对抗方案。主要内容包括: 反爬机制分析: 采用JA4+ TLS指纹识别、极验v6验证码等多层防护 IP限制策略严格区分未登录/普通/VIP账号 精准识别并封禁数据中心IP 核心解决方案: 构建高可用住宅代理池,动态轮换真实用户IP 基于YOLOv8的验证码缺口识别技术(准确率99%) 分布式架构设计,支持千万级数据采集 多账号池管理与行为模拟技术 技术亮点: 动态住宅IP池实现1%以下封禁率 Playwright浏

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1326

是否赢得井字游戏

package com.crack; public class HasWon { int hasWon(int[][] board) { int N=board.length; int row=0; int col=0; for(row=0;row { for(col=1;col { if(board[row][col]!=board[row][col-1]) br

stophil的专栏 986

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

程序员面试金典 - 面试题 16.04. 井字游戏(计数)

1. 题目 设计一个算法,判断玩家是否赢了井字游戏。输入是一个 N x N 的数组棋盘,由字符" ",“X"和"O"组成,其中字符” "代表一个空位。 以下是井字游戏的规则: 玩家轮流将字符放入空位(" ")中。 第一个玩家总是放字符"O",且第二个玩家总是放字符"X"。 "X"和"O"只允许放置在空位中,不允许对已放有字符的位置进行填充。 当有N个相同(且非空)的字符填充任何行、列或对角线时,...

Michael是个半路程序员 4787

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【数组】井字游戏

题目: 设计一个算法,判断玩家是否赢了井字游戏。输入是一个 N x N 的数组棋盘,由字符" ",“X"和"O"组成,其中字符” "代表一个空位。 以下是井字游戏的规则: 玩家轮流将字符放入空位(" “)中。 第一个玩家总是放字符"O”,且第二个玩家总是放字符"X"。 "X"和"O"只允许放置在空位中,不允许对已放有字符的位置进行填充。 当有N个相同(且非空)的字符填充任何行、列或对角线时,游戏结束,对应该字符的玩家获胜。 当所有位置非空时,也算为游戏结束。 如果游戏结束,玩家不允许再放置字符。 如果游戏存

yunyuzhu的博客 724

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

井字游戏 人机对战 java实现

package com.ecnu.Main; /** * 主函数触发游戏 */public class MainApplication { public static void main(String[] args){ TicTacToeGame ticTacToeGame = new TicTacToeGame(); ticTacToeGame.start()...

weixin_30363817的博客 627

Leetcode 794. 有效的井字游戏 C++

Leetcode 794. 有效的井字游戏 题目 用字符串数组作为井字游戏的游戏板 board。当且仅当在井字游戏过程中,玩家有可能将字符放置成游戏板所显示的状态时,才返回 true。 该游戏板是一个 3 x 3 数组,由字符 " ",“X” 和 “O” 组成。字符 " " 代表一个空位。 以下是井字游戏的规则: 玩家轮流将字符放入空位(" ")中。 第一个玩家总是放字符 “X”,且第二个玩家总是放字符 “O”。 “X” 和 “O”只允许放置在空位中,不允许对已放有字符的位置进行填充。 当有 3 个相同(

weixin_43750513的博客 573

careercup-中等难题 17.2

17.2 设计一个算法,判断玩家是否赢了井字游戏。 解法: 假设这个检查某人是否赢得了井字游戏的函数为HasWon,那么我们第一步要向面试官确认, 这个函数是只调用一次,还是要多次频繁调用。如果是多次调用, 我们可以通过预处理来得到一个非常快速的版本。 方法一:如果HasWon函数需要被频繁调用 对于井字游戏,每个格子可以是空,我的棋子和对方的棋子3种可能,总共有39= 19683 种可...

weixin_30618985的博客 339

LeetCode :面试题 16.04. 井字游戏(C语言实现) (时间和内存超过100%)

LeetCode :面试题 16.04. 井字游戏 题目地址: https://leetcode-cn.com/problems/tic-tac-toe-lcci/ 设计一个算法,判断玩家是否赢了井字游戏。输入是一个 N x N 的数组棋盘,由字符" ",“X"和"O"组成,其中字符” "代表一个空位。 以下是井字游戏的规则: 玩家轮流将字符放入空位(" ")中。 第一个玩家总是放字符"O",且第二个玩家总是放字符"X"。 "X"和"O"只允许放置在空位中,不允许对已放有字符的位置进行填充。 当有N个相

Linux 1682

JAVA实现分析井字游戏胜负

import java.io.ByteArrayOutputStream; import java.io.PrintStream; import static org.junit.Assert.*; public class Game { Game game = null; Result result = null; PrintStream console = n...

laocooon的博客 836
上一篇: Moderate Swap不用临时变量 @CareerCup
下一篇: Moderate 阶层的结尾0个数 @CareerCup
chiiis
博客等级 码龄14年 422粉丝 429原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值