引言:CSP(http://www.cspro.org/lead/application/ccf/login.jsp)是由中国计算机学会(CCF)发起的"计算机职业资格认证"考试,针对计算机软件开发、软件测试、信息管理等领域的专业人士进行能力认证。认证对象是从事或将要从事IT领域专业技术与技术管理人员,以及高校招考研究生的复试对象。

  • 问题描述

  消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有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

  • 源代码

# include <stdio.h>

# include <stdlib.h>

# include <memory.h>

int main(void)

{

int n; //n行

int m; //m列

scanf("%d", &n);

scanf("%d", &m);

//给输入矩阵和辅助矩阵分配空间

int **pInput = (int **)malloc(sizeof(int *) * n); //输入矩阵

int **pMatrix = (int **)malloc(sizeof(int *) * n); //辅助矩阵,如果相应位置应该被消除置0,否则置1

for (int i = 0; i < n; i++)

{

pInput[i] = (int *)malloc(sizeof(int) * m);

memset(pInput[i], 0, sizeof(int) * m);

pMatrix[i] = (int *)malloc(sizeof(int) * m);

for (int j = 0; j < m; j++)

{

pMatrix[i][j] = 1;

}

}

//输入

for (int i = 0; i < n; i++)

{

for (int j = 0; j < m; j++)

{

scanf("%d", &pInput[i][j]);

}

}

// 按行检查

for (int i = 0; i < n; i++)

{

// m<3代表在行上不可能有能消除的元素

if (m < 3)

{

break;

}

else

{

for (int j = 0; j < m; j++)

{

int count = 1;

while ((j+1) < m && pInput[i][j] == pInput[i][j+1])

{

count += 1;

j += 1;

}

if (count >= 3)

{

// 设置辅助矩阵的值

int num = 1;

for (int column = j; num <= count; num++, column--)

{

pMatrix[i][column] = 0;

}

}

}

}

}

// 按列检查

for (int i = 0; i < m; i++)

{

// n<3代表在行上不可能有能消除的元素

if (n < 3)

{

break;

}

else

{

for (int j = 0; j < n; j++)

{

int count = 1;

while ((j+1) < n && pInput[j][i] == pInput[j+1][i])

{

count += 1;

j += 1;

}

if (count >= 3)

{

// 设置辅助矩阵的值

int num = 1;

for (int column = j; num <= count; num++, column--)

{

pMatrix[column][i] = 0;

}

}

}

}

}

// 输出结果

for (int i = 0; i < n; i++)

{

for (int j = 0; j < m; j++)

{

printf("%d ", pInput[i][j]*pMatrix[i][j]);

}

printf("\n");

}

//给输入矩阵和辅助矩阵释放空间

for (int i = 0; i < n; i++)

{

free(pInput[i]);

free(pMatrix[i]);

}

free(pInput);

free(pMatrix);

return 0;

}

最新文章

  1. poj2763
  2. U-boot中的FDT
  3. Docker Hub仓库注册,使用
  4. MySQL常用的自带函数
  5. UVa 10161 Ant on a Chessboard
  6. [转]C#如何在ListView失去焦点的情况下仍然保持Item高亮
  7. 2016 系统设计第一期 (档案一)MVC 相关控件整理
  8. Day6 - Python基础6 面向对象编程
  9. Nagios+pnp4nagios+rrdtool 安装配置nagios(一)
  10. ormlite 删除操作
  11. xshell配色Solarized Dark
  12. Spring【依赖注入】就是这么简单
  13. [vue]vue基础复习项案例stepbystep
  14. Visual Studio 禁用诊断工具
  15. C#常用单元测试框架比较:XUnit、NUnit和Visual Studio(MSTest)
  16. win10 大文件 安卓android studio修改 汉化
  17. Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
  18. jvm垃圾回收的过程
  19. java中4种修饰符访问权限的区别
  20. QS:vue中qs的使用

热门文章

  1. 【noip模拟赛 王强的疑惑】 题解
  2. 多线程系列 - 基础篇01 - 线程基本概念 &amp; 线程优先级 &amp; 守护线程 60%
  3. 基于oracle数据库存储过程的创建及调用
  4. iOS OC与JS的交互(JavaScriptCore实现)
  5. scrapy管道MySQL简记
  6. centos6 命令界面切换到图形界面
  7. vim编辑器操作汇总
  8. pycharm使用杂记
  9. lnmp+coreseek实现站内全文检索(安装篇)
  10. PTA基础编程题目集6-6求单链表结点的阶乘和(函数题)