【CSP试题回顾】201512-2-消除类游戏

news2024/10/6 6:50:03

CSP-201512-2-消除类游戏

解题思路

  1. 输入棋盘大小和颜色: 首先,程序从标准输入读取两个整数nm,分别代表棋盘的行数和列数。然后,程序读取接下来的n行输入,每行包含m个整数,代表棋盘上每个方格中的棋子颜色。

  2. 初始化: 代码中使用了vector<vector<int>>来存储棋盘的状态。还定义了一个结构体MyPoint用于表示棋子的位置,以及一个pointList向量存储将要被消除的棋子的位置。

  3. 横向检查: 程序通过两层循环遍历棋盘的每一行。它比较当前棋子与上一个棋子的颜色。如果它们的颜色不同,程序会检查是否有连续三个或更多相同颜色的棋子(通过变量constantTimes来记录)。如果有,将这些棋子的位置添加到pointList中;如果没有连续三个颜色相同的棋子,则需要重置lastNumconstantTimeschildPointList如果颜色相同,则增加constantTimes的值,并将当前棋子的位置添加到childPointList中以便进一步处理。

  4. 纵向检查: 类似于横向检查,但这次是按列来遍历棋盘。对于每一列,程序检查连续的相同颜色的棋子,并在发现三个或更多连续相同颜色的棋子时,将它们的位置添加到pointList

  5. 消除棋子: 遍历pointList中存储的所有位置,并将这些位置上的棋子在棋盘上标记为0,代表这些棋子已经被消除。

完整代码

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

struct MyPoint
{
	int x, y;
};
vector<MyPoint>pointList;

int main() {
	int row, col;
	cin >> row >> col;

	vector<vector<int>>chessBoard(row, vector<int>(col));
	for (auto& it : chessBoard) {
		for (auto& jt : it) {
			cin >> jt;
		}
	}

	// 横向遍历
	for (int i = 0; i < row; i++)
	{
		int constantTimes = 1, lastNum = -1;
		vector<MyPoint>childPointList;

		for (int j = 0; j < col; j++)
		{
			if (chessBoard[i][j] != lastNum) // 与前一个数字不同或者是本行的最后一个元素
			{
				// 判断能否消除
				if (constantTimes >= 3)
				{					
					for (auto& it : childPointList) { // 将消除的点插入子集
						MyPoint t = it;
						pointList.push_back(t);
					}
				}

				lastNum = chessBoard[i][j]; // 更新上一个数字到lastNum
				constantTimes = 1; // 重置连续次数
				childPointList.clear(); // 清空以前的子集

				MyPoint t{ i,j }; // 把当前点加入子集
				childPointList.push_back(t);

			}
			else // 和上一个数字相同
			{
				constantTimes++; // 连续次数+1
				MyPoint t{ i,j }; // 把当前点加入子集
				childPointList.push_back(t);
			}
		
			if (j == col - 1)
			{
				// 判断能否消除
				if (constantTimes >= 3)
				{
					for (auto& it : childPointList) { // 将消除的点插入子集
						MyPoint t = it;
						pointList.push_back(t);
					}
				}
			}
		}
	}

	// 纵向遍历
	for (int i = 0; i < col; i++)
	{
		int constantTimes = 1, lastNum = -1;
		vector<MyPoint>childPointList;

		for (int j = 0; j < row; j++)
		{
			if (chessBoard[j][i] != lastNum)
			{
				if (constantTimes >= 3) 
				{
					for (auto& it : childPointList) { 
						MyPoint t = it;
						pointList.push_back(t);
					}
				}

				lastNum = chessBoard[j][i]; 
				constantTimes = 1;
				childPointList.clear();

				MyPoint t{ j,i };
				childPointList.push_back(t);
			}
			else 
			{
				constantTimes++;
				MyPoint t{ j,i };
				childPointList.push_back(t);
			}

			if (j == row - 1)
			{
				// 判断能否消除
				if (constantTimes >= 3)
				{
					for (auto& it : childPointList) { // 将消除的点插入子集
						MyPoint t = it;
						pointList.push_back(t);
					}
				}
			}
		}
	}


	for (auto& it : pointList)
	{
		chessBoard[it.x][it.y] = 0;
	}

	for (auto& it : chessBoard) {
		for (auto& jt : it) {
			cout << jt << " ";
		}
		cout << endl;
	}
	return 0;
}

请添加图片描述

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

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

相关文章

Linux-查看服务器配置信息

一、查看操作系统 1.1、查看操作系统的版本 命令:cat /etc/redhat-release 1.2、查看系统内核 命令:uname –a 二、查看cpu信息 2.1、所有信息 lscpu [root@tes ~]# lscpu Architecture: x86_64 ##cpu架构 CPU op-mode(s): 32-bit, 64-bit Byte Order:…

Qt入门(一)Qt概述

Qt是什么&#xff1f; Qt是一个跨平台应用开发框架。 Qt既包括了一系列的Qt库&#xff0c;还包括诸多配套的开发工具如QtCreater&#xff0c;GUI Designer。Qt本身是由C开发的&#xff0c;但是也提供了其他编程语言的接口。 Qt的定位以及同类 学一种技术&#xff0c;最重要的是…

vue3 如何通过一个方法触发点击事件

需求&#xff1a;在通过一个btn按钮触发另外一个按钮的点击事件。达到点击ok&#xff08;model框按钮&#xff09;,触发create&#xff08;form表单&#xff09;按钮的事件 <!-- 1.首先通过ref创建了一个名为linkRef的引用变量&#xff0c;并将其初始化为null。 --> <…

MySQL进阶之(四)InnoDB数据存储结构之行格式

四、InnoDB数据存储结构之行格式 4.1 行格式的语法4.2 COMPACT 行格式4.2.1 记录的额外信息01、变长字段长度列表02、NULL 值列表03、记录头信息 4.2.2 记录的真实数据 4.3 Dynamic 和 Compressed 行格式4.3.1 字段的长度限制4.3.2 行溢出4.3.3 Dynamic 和 Compressed 行格式 4…

java工程师面试突击第二季分布式,Java视频

一. 什么是架构和架构本质 在软件行业&#xff0c;对于什么是架构&#xff0c;都有很多的争论&#xff0c;每个人都有自己的理解。 此君说的架构和彼君理解的架构未必是一回事。因此我们在讨论架构之前&#xff0c;我们先讨论架构的概念定义&#xff0c;概念是人认识这个世界的…

VMwareWorkstation17.0虚拟机搭建WindowsME虚拟机(完整安装步骤详细图文教程)

VMwareWorkstation17.0虚拟机搭建WindowsME虚拟机&#xff08;完整安装步骤详细图文教程&#xff09; 一、Windows ME安装准备工作3.1 Windows ME下载地址3.2 DOS软盘版下载地址3.3 UltraISO 4.用VMware虚拟模仿当年的电脑配置4.1 新建虚拟机4.2 类型配置4.3 类型配置4.4 选择版…

1、MQ_介绍、优缺点、类型等

MQ介绍 1. MQ概述 MQ&#xff08;Message Queue&#xff09;&#xff1a;消息队列&#xff0c;是基础数据结构中FIFO&#xff08;first in first out&#xff09;的一种数据结构。一般用来解决流量削峰、应用解耦、异步处理等问题&#xff0c;实现高性能&#xff0c;高可用&a…

NOC2023软件创意编程(学而思赛道)python小高组复赛真题

目录 下载原文档打印做题: 软件创意编程 一、参赛范围 1.参赛组别:小学低年级组(1-3 年级)、小学高年级组(4-6 年级)、初中组。 2.参赛人数:1 人。 3.指导教师:1 人(可空缺)。 4.每人限参加 1 个赛项。 组别确定:以地方教育行政主管部门(教委、教育厅、教育局) 认…

基于java springboot+VUE疫情防疫系统系统前后端分离设计和实现

基于java springbootVUE疫情防疫系统系统前后端分离设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言…

K8s Pod 进阶

目录 资源限制 Pod 和容器的资源请求和限制 CPU 资源单位 内存资源单位 示例1 示例2 重启策略&#xff08;restartPolicy&#xff09; 示例 健康检查 探针的三种规则 Probe支持三种检查方法 示例1&#xff1a;exec方式 示例2&#xff1a;httpGet方式 示例3&…

C++--调整数组顺序使奇数位于偶数前面

题目&#xff1a; 输入一个整数数组&#xff0c;实现一个函数来调整该数组中数字的顺序&#xff0c;使得所有的奇数位于数组的前半部分&#xff0c;所有的偶数位于数组的后半部分&#xff0c;并保证奇数和奇数&#xff0c;偶数和偶数之间的相对位置不变。 方法一&#xff1a; …

第三届国际亲子游泳学术峰会,麒小佑为亲游行业提供健康解决方案

第三届国际亲子游泳学术峰会大合影 2024年2月26—28日&#xff0c;第三届国际亲子游泳学术峰会在中国青岛成功召开。 第三届国际亲子游泳学术峰会是中国婴幼游泳行业最高标准的学术性会议&#xff0c;由亲游圈主办&#xff0c;旨在为本行业搭建一个高端圈层&#xff0c;帮助机…

保留数据的重装系统教程!(win10系统)

上车警告&#xff01;&#xff01;&#xff01; 本教程无需思考&#xff0c;跟着操作一步一步来就能完成系统的重装。原理是将C盘系统重装&#xff0c;其他盘符数据保存。适用于系统盘重装数据或更改系统版本。 重要提示&#xff01;&#xff01;&#xff01; C盘有重要学习资…

18个惊艳的可视化大屏(第18辑):数字资产场景

hello&#xff0c;我是贝格前端工场&#xff0c;本次分享可视化大屏在数字资产领域的应用&#xff0c;喜欢文章的别忘点赞关注&#xff0c;文章底部也有其他行业的案例&#xff0c;有需求您说话&#xff08;可私信&#xff09;。 数字资产可视化大屏可以应用于各种场景&#x…

从零学习Linux操作系统 第三十一部分 ansible常用模块介绍

一、ansible运行模块的两种方式 Ad-Hoc方式 ##利用ansible命令直接完成管理&#xff0c;主要用于临时命令使用场景 playbook方式 ##ansible脚本&#xff0c;主要用于大型项目场景&#xff0c;需要前期的规划&#xff0c;相当于shell当中的脚本 二、如何查看模块帮助 ansible…

重磅:2024广州国际酒店工程照明展览会

2024广州国际酒店工程照明展览会 Guangzhou international hotel engineering lighting exhibition 2024 时间&#xff1a;2024年12月19-21日 地点&#xff1a;广州.中国进出口商品交易会展馆 承办单位&#xff1a;广州佛兴英耀展览服务有限公司 上海昶文展览服务有限公司…

基于springboot的蜗牛兼职网的设计与实现论文

摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;蜗牛兼职网当然也不能排除在外。蜗牛兼职网是以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c…

FISCO BCOS区块链平台上的智能合约压力测试指南

引言 在当今的分布式系统中&#xff0c;区块链技术因其去中心化、安全性和透明性而备受关注。随着区块链应用的不断扩展&#xff0c;对其性能和稳定性的要求也越来越高。因此&#xff0c;对区块链网络进行压力测试显得尤为重要。 目录 引言 1. 配置FISCO BCOS节点 2. 安装和…

strongswan编译报错:NID_sm2p256v1未定义

strongswan编译报错&#xff1a;NID_sm2p256v1未定义 现象&#xff1a; 原因&#xff1a; 我用的是openssl.-1.1.1d&#xff0c;发现NID_sm2p256v1曲线改为了NID_sm2&#xff08;gmssl用的是NID_sm2p256v1&#xff09;。对比了一下参数&#xff0c;是相同的。个人猜测是国际只…

C语言初学10:共同体

一、共同体作用 提供一种在相同内存位置存储不同数据类型的有效方式 二、共同体定义 union [union tag] //tag是可选参数 {member definition;member definition;...member definition; } [one or more union variables]; // 共同体变量是可选的 三、共同体占用空间大小 #…