每日OJ_牛客_五子棋(判断是否有赢)

news2024/9/23 17:13:14

目录

牛客_五子棋(判断是否有赢)

解析代码


牛客_五子棋(判断是否有赢)

五子棋__牛客网

题目:

用例输入:

....................
....................
....................
....................
......*.............
.......*............
........*...........
....++++.*..........
..........*.........
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
.......*............
......+*+++.........
.......*............
.......*............
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................

用例输出:

Yes
No

解析代码

        dir代表当前位置的8个方向,其中上下、左右、左上右下、右上左下为必须放在一起检测。

获取一个棋盘,按照行列检测棋盘中的每个位置,当拿到一个位置后,按照以下步骤操作:

  1. 以该位置为中心,依次检测该位置的上下、左右、左上右下、右上左下,比如左上
  2. 从该位置开始向上检测,找出连在一起的同种棋子个数,再向下检测同种棋子的个数并累计,注意在检测时,中心位置统计了两次,上下统计完时,需要给结果减去1
  3. 按照2统计完上下、左右、左上右下、右上左下各个方向,找出最大的同种棋子个数
  4. 检测3中统计出的最大同种棋子个数,如果大于等于5,输出YSE,否则取下一个位置继续1
  5. 如果所有的位置检测完,没有超过5个的相同棋子,则输出NO
#include <iostream>
#include <vector>
#include <string>
using namespace std;
#define N 20

int count(vector<string> table, char ch, int x, int y)
{
	int maxc = 0;
	int dir[4][2][2] = { {{ -1,0 },{ 1,0 }},{{ 0,-1 },{ 0,1 }},
						 {{ -1,-1 },{ 1,1 }},{{ -1,1 },{ 1,-1 }} };
	for (int i = 0; i < 4; ++i) // 四种方向
	{
		int c = 0;
		for (int j = 0; j < 2; ++j) // 两个小方向
		{
			int nx = x, ny = y;
			while (nx >= 0 && nx < N && ny >= 0 && ny < N && table[nx][ny] == ch)
			{
				nx += dir[i][j][0];
				ny += dir[i][j][1];
				++c;
			}
		}
		maxc = (maxc > c ? maxc : c);
	}
	return maxc - 1; //统计两个方向(如横向的左右两个方向)的时候,当前棋子被计算了两次
}

bool solve(vector<string> table)
{
	// 遍历棋谱,如果某个位置有棋子,再向该位置进行搜索
	for (int i = 0; i < N; ++i)
	{
		for (int j = 0; j < N; ++j)
		{
			if (table[i][j] == '*' || table[i][j] == '+')
				if (count(table, table[i][j], i, j) >= 5)
					return true; // 当某个位置有连在一起的棋子,结束搜索
		}
	}
	return false;
}

int main()
{
	vector<string> table(N);
	while (cin >> table[0])
	{
		for (int i = 1; i < N; ++i)
		{
			cin >> table[i];
		}
		cout << (solve(table) ? "Yes" : "No") << endl;
	}
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2105504.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Nginx: 模块化管理编译安装与配置结构

Nginx 模块化管理机制 Nginx 是一个高性能web和反向代理服务器&#xff0c;尤其是在激烈的Web服务器竞争领域中能够依然保持很好的这个发展势头&#xff0c;并且在现在的众多企业中得到一个广泛的应用&#xff0c;这一切其实跟Nginx架构设计是分不开的 另外高度模块化的设计也…

计算机毕业设计 二手闲置交易系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

影石相机tf内存卡数据格式化后恢复方法

在数字化时代&#xff0c;‌相机成为了我们记录生活、‌捕捉瞬间的重要设备。‌影石相机&#xff0c;‌以其出色的性能和便捷的操作&#xff0c;‌赢得了众多摄影爱好者的青睐。‌然而&#xff0c;‌在使用过程中&#xff0c;‌我们可能会遇到一些意外情况&#xff0c;‌如不小…

PTA L1-041 寻找250

L1-041 寻找250&#xff08;10分&#xff09; 对方不想和你说话&#xff0c;并向你扔了一串数…… 而你必须从这一串数字中找到“250”这个高大上的感人数字。 输入格式&#xff1a; 输入在一行中给出不知道多少个绝对值不超过1000的整数&#xff0c;其中保证至少存在一个“2…

828华为云征文:华为云 Flexus X 实例性能测评——SuperBench 一键窥见性能

今天我拿到了华为云 Flexus X 实例&#xff0c;这款云服务是华为云推出的有一款明星产品&#xff0c;面向零售、金融、游戏等行业大多数通用工作负载场景。这次&#xff0c;我们就来测评一下它的性能到底怎么样&#xff01; Flexus 云服务 X 实例 在测评之前&#xff0c;我们…

星河产业应用创新奖,AI产业实干者的闪耀时刻

华晨宝马汽车有限公司搭建企业级 Agent 服务平台&#xff0c;推理成本降低50%&#xff08;获2023年星河产业应用创新奖&#xff09; 泰康保险集团股份有限公司实现保险理赔场景数字化升级&#xff0c;理赔作业效率提升27%&#xff08;获2022年飞桨产业应用创新奖&#xff09; …

【重学 MySQL】七、MySQL的登录

【重学 MySQL】七、MySQL的登录 MySQL 服务的启动与停止启动MySQL服务停止MySQL服务 MySQL 自带客户端的登录与退出登录登录步骤 退出注意事项 MySQL 服务的启动与停止 MySQL服务的启动与停止是数据库管理中的基本操作。 启动MySQL服务 通过“服务”窗口启动&#xff1a; 点击…

工作加速器:五种思维导图策略优化你的日常

思维导图是一种非常有效的图形工具&#xff0c;它能够清晰地展示发散性思维&#xff0c;并帮助我们将大量信息有序地组织起来。这种工具在日常生活和工作中都非常实用&#xff0c;因其简洁高效的特点&#xff0c;受到了广泛的欢迎。无论是在头脑风暴、项目规划&#xff0c;还是…

【AI-本地部署大模型】Centos虚拟机部署MaxKB、Ollama【基于大语言模型的知识库问答系统】

Ollama特点Centos部署docker部署脚本安装 通义千问包下载 MaxKB部署docker部署控制台 配置模型设置 Ollama Ollama 是一个开源项目&#xff0c;旨在让用户能够在本地计算机上轻松运行大型语言模型&#xff08;LLM&#xff09;。通过 Ollama&#xff0c;用户可以部署和运行多种…

显微镜基础知识--脑机起步

一、显微镜类别 学生级、实验级、研究级生物显微镜单目型、双目型、三目型生物显微镜 二、显微镜基础原理 &#xff08;1&#xff09;光学显微镜 光学显微镜主要由目镜、物镜、载物台和反光镜(集光镜)组成。目镜和物镜都是凸透镜&#xff0c;焦距不同。物镜的凸透镜焦距小于…

【算法每日一练及解题思路】计算以空格隔开的字符串的最后一个单词的长度

【算法每日一练及解题思路】计算以空格隔开的字符串的最后一个单词的长度 一、题目&#xff1a;计算以空格隔开的字符串的最后一个单词的长度 二、举例&#xff1a; 输入&#xff1a;hello nowcoder 输出&#xff1a;8 说明&#xff1a;最后一个单词为nowcoder&#xff0c;长…

PDF如何转化成Word文档?看完学会转换

PDF如何转化成Word文档&#xff1f;在数字化办公和学习的日常中&#xff0c;PDF文档因其出色的稳定性和跨平台兼容性而广受欢迎。然而&#xff0c;当我们需要编辑或修改PDF中的内容时&#xff0c;往往会遇到一些障碍&#xff0c;因为PDF格式本身并不支持直接编辑。这时&#xf…

c++类与对象的static成员

一.概念 用static修饰的成员变量称为类的静态成员变量&#xff0c;static修饰的成员函数称为类的静态成员函数。 如何声明和定义static成员 声明&#xff1a; 在定义类时进行声明 定义&#xff08;类外定义&#xff09;&#xff1a; static成员的定义/初始化必须在类外&am…

【C++ 面试 - STL】每日 3 题(七)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏&…

3.js - Water2不显示水波纹

文中需要的资源&#xff0c;在我的资源那里能下载 【3.js 有2个水的生成方式&#xff1a;Water、Water2】 注意&#xff1a; 这个问题&#xff0c;是基于 Water2的 如下方式&#xff0c;不显示波纹 import * as THREE from three import { OrbitControls } from three/exam…

人工智能相关学科的关系

禹晶、肖创柏、廖庆敏《数字图像处理》资源二维码

C++——类与对象(一)

目录 引言 面向过程与面向对象 1.面向过程 2.面向对象 类 1.类的定义 2.类的访问限定符 3.类域 4.类域与其他作用域 对象 1.类对象的实例化 2.对象的大小 2.1 如何计算对象的大小 2.2 内存对齐规则 2.3 示例 3.this指针 3.1 this指针的引入 3.2 this指针的详…

Nacos Config的配置中心

1.创建一个新的文件 2.导入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven…

review——Linux:进程地址空间

目录 前言 一、页表 1.回顾一下fork接口 2..先看一个有意思的现象 3.地址映射与页表 二、进程地址空间 1.进程地址空间是什么 2.进程地址空间与页表起到了什么作用 3.进程地址空间有什么作用 4.缺页中断与写时拷贝 5.写时拷贝的相关问题 6.关于内存空间申请的讨 前言 不知道大…

SpringCloud-02 Consul服务注册与发现

Consul是一种用于服务发现、配置和分布式协调的开源工具。Consul提供了以下主要功能&#xff1a; 1.服务发现&#xff1a;Consul允许开发人员在微服务架构中注册和发现服务。它可以自动检测新添加的服务并为它们分配唯一的网络地址。 2.健康检查&#xff1a;Consul可以定期检查…