201512-2 消除类游戏 C++ 100分实现

c++消消乐游戏课程设计 消除类游戏是益智游戏的一种,玩家游戏过程中主要是将一定量相同的游戏元素,如水果、宝石、动物头像、积木麻将牌等,使它们彼此相邻配对消除来获胜。通常是将三个同样的元素配对消除,所以又称为三消类游戏。当然,三个以上的同样的元素也能消除。... 阅读详情

问题描述
  消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消除。当有多处可以被消除时,这些地方的棋子将同时被消除。
  现在给你一个n行m列的棋盘,棋盘中的每一个方格上有一个棋子,请给出经过一次消除后的棋盘。
  请注意:一个棋子可能在某一行和某一列同时被消除。
  
输入格式
  输入的第一行包含两个整数n, m,用空格分隔,分别表示棋盘的行数和列数。
  接下来n行,每行m个整数,用空格分隔,分别表示每一个方格中的棋子的颜色。颜色使用1至9编号。
  
输出格式
  输出n行,每行m个整数,相邻的整数之间使用一个空格分隔,表示经过一次消除后的棋盘。如果一个方格中的棋子被消除,则对应的方格输出0,否则输出棋子的颜色编号。
  
样例输入
4 5
2 2 3 1 2
3 4 5 1 4
2 3 2 1 3
2 2 2 4 4

样例输出
2 2 3 0 2
3 4 5 0 4
2 3 2 0 3
0 0 0 4 4

样例说明
  棋盘中第4列的1和第4行的2可以被消除,其他的方格中的棋子均保留。
  
样例输入
4 5
2 2 3 1 2
3 1 1 1 1
2 3 2 1 3
2 2 3 3 3

样例输出
2 2 3 0 2
3 0 0 0 0
2 3 2 0 3
2 2 0 0 0

样例说明
  棋盘中所有的1以及最后一行的3可以被同时消除,其他的方格中的棋子均保留。
  
评测用例规模与约定
  所有的评测用例满足:1 ≤ n, m ≤ 30。

实验思路

使用二维数组存储数据,将初始矩阵复制一遍,这样初始矩阵就有 a[i][j]、b[i][j] ,采用行列分离的战术,对矩阵a——行扫描消除,对矩阵b——列扫描消除,这样再进行for循环,如果b[i][j]=0的时候,那么 a[i][j]=0,从而将行列都可以进行消除。
具体进行消除的时候,对于行消除,首先扫描每一行,使用index来存储索引,通过判断值和当前位置如果值不一样,而且索引之间差别大于等于3,那么就可以进行消除,要么就是j到达最后一列,就可以进行消除了。
对于列消除,需要扫描每一列,索引数组的位置和行需要调换,其余一样。

完整代码

#include <iostream>
using namespace std;

int a[32][32];
int b[32][32];
int main()
{
	int m, n;
	cin >> n >> m;

	for (int i = 0; i < n; i++) {  // 接受输入
		for (int j = 0; j < m; j++) {
			cin >> a[i][j];
		}
	}
	for (int i = 0; i < n; i++) {  // 接受输入
		for (int j = 0; j < m; j++) {
			b[i][j] = a[i][j];
		}
	}
	int temp = 0;
	int index = 0;
	for (int i = 0; i < n; i++) {  //首先扫描每一行
		temp = a[i][0];
		index = 0;
		for (int j = 1; j < m; j++) {
			if (temp != a[i][j]) { 
				if (j > index + 2) {  //此时 a[i][j]为新值,所以temp的值至少存在三个,则距离要大于等于3
					for (int k = index; k <j; k++) {
						a[i][k] = 0;
					}
				}
					temp = a[i][j];   //换成新的值和坐标
					index = j;
		
			}
			else {        
				if (j==m-1) {   //如果j到达最后一行
					if (j >= index + 2) {      //此时 a[i][j]和temp相等,所以距离大于等于2即可
						for (int k = index; k <=j; k++) {
							a[i][k] = 0;
						}
					}
				} 

			}
		}
	}
	/*cout << endl;
	cout << endl;
	cout << endl;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			cout << a[i][j] << " ";
		}
		cout << endl;
	}
	cout << endl;
	cout << endl;
	cout << endl;*/

	for (int v = 0; v < m; v++) {  //首先扫描每一列

		temp = b[0][v];
		index = 0;
		for (int u = 0; u < n; u++) {
			if (temp != b[u][v]) {
				if (u > index + 2) {  //此时 a[u][v]为新值,所以temp的值至少存在三个,则距离要大于等于3
					for (int k = index; k < u; k++) {
						b[k][v] = 0;
					}
				}
				temp = b[u][v];
				index = u;

			}
			else {
				if (u == n - 1) {  //此时 a[i][j]和temp相等,所以距离大于等于2即可
					if (u >= index + 2) {
						for (int k = index; k <=u; k++) {
							b[k][v] = 0;
						}
					}
				}


			}
		}

	}

	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			if (b[i][j] == 0) {
				a[i][j] = 0;
			}
		}

	}

	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			cout << a[i][j] << " ";
		}
		cout << endl;
	}

	return 0;
}


CCF CSP201512-2消除类游戏(c++100) CCF CSP201512-2消除类游戏 思路;看用例约定发现暴力法不会超时,那么就用另外一个数组保存元素,向下和向右遍历 #include<iostream> using namespace std; int arr[31][31],ans[31][31]; int main(){ int n,m; cin>>n>>m; for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ cin& 阅读详情

相关推荐

CCF认证 201512-2 消除类游戏 100分

试题编号: 201512-2 试题名称: 消除类游戏 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述   消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消除。当有多处可以被...

一青里的博客 386

201512-2消除类游戏

思路很简单,二维数组保存值和每个值的标记位,分别按行按列扫描,有连续3个数相同,则置标记位为0,最后遍历数组时删除。 #include&lt;bits/stdc++.h&gt; using namespace std; struct xxl{ int value; int flag; //flag=0为置零标记 }a[30][30]...

闲敲棋子骆灯花的博客 357

C语言代码夜夜爱消除

C语言代码,新手写的不要喷我哈C语言代码,新手写的不要喷我哈

C/C++编程题刷题:两两配对

两两配对 【题目描述】小Q有M(M为偶数)名员工, 第i名员工完成工作的时候有一个拖延时间值ti。 现在小Q手里有M/2份工作需要完成, 每一份工作都需要安排两名员工参与, 对于第i份工作所需完成的时间为两名员工的拖延时间值总和。 现在M/2份工作同时开始进行,小Q希望所有工作结束的时间尽量早, 请你帮小Q设计一个优秀的员工分配方案,使得用尽量少的时间完成所有工作,并输出工作所需的最短时间。 输入描述 第一行为一个正整数n(1<=n<=105)。 接下来有n行,每行两个正整数x和y,表示

Emotion的博客 1249

三消游戏的一种实现(JS/C++两个版本)

自己写的一个三消游戏, 介绍在这:http://blog.youkuaiyun.com/gneveek/article/details/50640412 因为有几个哥们要,所以就上传到这里了,省得我一直发邮件:)

creator消除游戏

消除类的游戏 点击消除 合成新模块 包括算法 和好多扩展包 很强大 消除算法和界面搭建都有 只要下载cocoscreator 2.0 吧同名文件夹替换 打开 就能运行

C语言零基础项目:对对碰(消除类)游戏,详细思路+源码分享

游戏中消除的对象为各种各样的头像,包括树、小车、草莓和酒瓶等一些头像。玩家通关移动这些头像位置凑够一定数量的相同图标即可消除。

致力于C语言C++知识分享! 2009

基于VUE的智慧园区可视化平台(开题报告+源码)

本系统(程序源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景: 随着城市化进程的加速,园区作为城市发展的重要组成部分,其管理和运营效率直接影响到城市的经济发展和居民生活质量。传统的园区管理方式已经难以满足现代城市对于高效率、智能化的需求。因此,利用先进的信息技术构建一个智慧园区可视化平台显得尤为重要。Vue.js作为一个高效的前端框架,能够帮助开发一个动态的、用户友好的智慧园区可视化平台,实现园区管理的数字化和智能化。

liu10611的博客 1179

【C语言】西电xdoj上机题(5.消除类游戏)

西电C语言上机题做题记录

2301_80231940的博客 813

Faster Planner——Kinodynamic Astar详解

实际成本和启发式成本 实际成本 Actual Cost   每条轨迹的真实代价函数定义如下: J(T)=∫0T∥u(t)∥2dt+ρT \mathcal{J}(T)=\int_{0}^{T}\|\mathbf{u}(t)\|^{2} d t+\rho T J(T)=∫0T​∥u(t)∥2dt+ρT 离散形式下: 启发成本 Heuristic Cost pμ∗(t)=16αμt3+12βμt2+vμc+pμc=pμc+vμc+T2∗((2∗vμc−2∗vμg)/(2∗T)−(6∗pμc−6∗pμg+6∗T∗v

漫长IT路 4833

FPGA八股文(2)——笔试的FPGA问题汇总(持续更新)

常见FPGA笔试题的概念总结

居安士的博客 8906

CCF CSP 201512-2 消除类游戏(C++语言100分)

#include <iostream> using namespace std; const int N=30,M=30; int chessman[N][M]= {0}; bool is_clear[N][M]= {false}; int main() { int n,m; cin>>n>>m; for (int i=0; i<n ; i++ ) { for (int j=0; j<m ; j++ )

AlbertDarren的博客 5236

【vue看板】

大屏看板提示:以下是本篇文章正文内容,下面案例可供参考提示:这里对文章进行总结:代码量较多,看板中的。

weixin_46223284的博客 2772

CCF认证201512-2消除类游戏

CCF认证201512-2消除类游戏题目描述算法设计+题目分析注意点+记录点代码(100分)感谢链接 题目描述 CCF认证201512-2消除类游戏 算法设计+题目分析 分析题目: 题目给予的是一个数字矩阵, 1、可建立一个副本矩阵R; 2、通过判断原矩阵G中的元素的上两格、下两格、左两格、右两格、左右、上下,这六种情况中是否存在消除情况; 3、对副本矩阵R进行赋值(出现了六种情况中的一种,就为0...

weixin_38562500的博客 320

FortiGate-60E防火墙忘记密码?用Console线+TFTP重装固件v7.0.9全流程

本文详细介绍了当FortiGate-60E防火墙忘记密码且物理重置无效时,如何通过Console线连接并利用TFTP服务器重装固件(如v7.0.9)的全流程。从恢复原理、工具准备、网络配置到逐步执行命令,提供了完整的实战指南,帮助管理员彻底恢复设备出厂设置并重置密码。

snow3的博客 333

SAP-QM-质检操作

SAP-QM-质检操作

yanzibing99的博客 8178

CCF201512-2 消除类游戏(100分)

试题编号:201512-2试题名称:消除类游戏时间限制:1.0s内存限制:256.0MB问题描述:问题描述  消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消除。当有多处可以被消除时,这些地方的棋子将同时被消除。  现在给你一个n行m列的棋盘,棋盘中的每一个...

海岛Blog 1万+

WINDOWS下SIP拨号的实现

在WIN10上拨打SIP电话  由于我的交换原理实验有一个是关于SIP的抓包的。而之前从未接触过SIP,所以在如何完成一次SIP拨号上遇到了不少问题,查了好多资料都没有完整的或者写的很清楚的,这里就对那些资料做一个总结,给出一个比较完善的解决方案,一来是记录此次实验的收获,而来也可能为其他有同样困惑的人解惑。  废话不多说直接开始。首先是下载一个可以拨打SIP电话的客户终端,这里我选择的是MicroSIP, 下载红圈内的文件,下载好之后直接一路安装即可,没有什么特别注意的地方。  安装好客户端之后,就需要注

weixin_43918519的博客 3807

CSP-201512-2-消除类游戏-分析及100分代码

#include<iostream> #include<cmath> using namespace std; int main() { int n,m; cin>>n>>m; int i,j,k; int a[n][m]; for(i=0;i<n;i++) { for(j=0;j<m;j++) { cin>>a[i][j]; } } for(i=0;i<n;i++)//一行 { f

zijin-jdd的博客 280

LOFIC / 全局快门在移动端的可行性:曝光容限、读出噪声与算力预算

手机端引入 LOFIC 与全局快门的核心权衡在于:在有限像素面积与功耗下,如何换取更高的动态范围与运动场景鲁棒性。LOFIC 通过侧向溢流到积分电容扩大满井并保持较高转换增益,全局快门在帧内一次性采样消除行时序伪影,但需付出像素填充率、读出噪声与片上存储功耗的代价。本文以工程可实操为目标,给出像素与读出链的简化模型、曝光损益测算、数据率与带宽估算、端到端算力与热预算方法,配套寄存器配置流程、帧内/帧间切换策略与验证清单,帮助在真实移动 SoC 与 ISP 约束下完成可行性评估与原型落地。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1139

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

CCFCSP 201512-2 消除类游戏(100score)

题目来源于CCFCSP 试题编号:201512-2 试题名称:消除类游戏 时间限制:1.0s 内存限制:256.0MB 问题描述:问题描述  消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消除。当有多处可以被消除时,这些地方的棋子将同时被消除。   现在给你一个n行m列的棋盘,棋盘中的每一个方格上有一个棋子,请给出经过一次消除后的棋盘。   请注意:一个棋子

计算机科学与技术专业学生的成长之路 384

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

CCF 201512-2 消除类游戏 100分

#include <iostream> using namespace std; int main() { int x,y; cin>>x>>y; int map[x][y]; bool flag[x][y]; //padding int temp[x+2][y+2]; for(int i=0;i<x;i++) for(int j=0...

irises1412的博客 216

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

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

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

ccf 201512-2 消除类游戏(100分)

问题描述   消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消除。当有多处可以被消除时,这些地方的棋子将同时被消除。   现在给你一个n行m列的棋盘,棋盘中的每一个方格上有一个棋子,请给出经过一次消除后的棋盘。   请注意:一个棋子可能在某一行和某...

jinduo16的博客 381

201512-2 消除类游戏 100分 15ms

#include<iostream> #include<cstring> using namespace std; int main(){ int n,m,A[30][30],B[30][30],C[30][30]; cin>>n>>m,memset(B,0,sizeof(B)),memset(C,0,sizeof(C)); for(int ...

宋旭升的博客 476
上一篇: 201604-3 路径解析 C++ 100分实现
下一篇: 201509-2 日期计算 C++实现 100分
木禾DING
博客等级 码龄8年 191粉丝 121原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值