博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CCF NOI1057 石头剪刀布
阅读量:7091 次
发布时间:2019-06-28

本文共 1139 字,大约阅读时间需要 3 分钟。

问题链接


时间限制: 1000 ms  空间限制: 262144 KB

题目描述 

  Bart的妹妹Lisa在一个二维矩阵上创造了新的文明。矩阵上每个位置被三种生命形式之一占据:石头,剪刀,布。每天,上下左右相邻的不同生命形式将会发生战斗。在战斗中,石头永远胜剪刀,剪刀永远胜布,布永远胜石头。每一天结束之后,败者的领地将被胜者占领。

  你的工作是计算出n天之后矩阵的占据情况。

输入

  第一行包含三个正整数r,c,n,分别表示矩阵的行数、列数以及天数。每个整数均不超过100。

  接下来r行,每行c个字符,描述矩阵初始时被占据的情况。每个位置上的字符只能是R,S,P三者之一,分别代表石头,剪刀,布。相邻字符之间无空格。

输出

  输出n天之后的矩阵占据情况。每个位置上的字符只能是R,S,P三者之一,相邻字符之间无空格。

样例输入

3 3 1

RRR
RSR
RRR
样例输出

RRR

RRR
RRR

数据范围限制

 


问题分析

  这是一个模拟题,直接模拟计算即可

  需要用一些程序技巧,使得程序代码简洁一些。

程序说明

  上下左右的坐标放在数组around[]中,程序的处理就可以用循环来控制。

  定义二维数组用于存储二维矩阵,周围多出一圈,可以省去数组下标的越界判定。

  函数doit()封装的功能是计算每一天过后矩阵的占据情况。

要点详解
先定义一个符号常量,再用它来定义二维数组,可以使得程序的通用性得到提高
一些编程技巧有助于简化程序的代码
函数memset()用于给大量的存储空间设置初始值是方便的。
数组around[]存储周围元素的相对下标,使得无序变有序,可以用循环来处理。


参考链接:(略)。

100分通过的程序:

#include 
#include
struct _around { int drow; int dcol;} around[] = {
{-1, 0}, {0, 1}, {1, 0}, {0, -1}};#define AN 4#define N 100char a[N+2][N+2], b[N+2][N+2];void doit(char x[][N+2], char y[][N+2], int r, int c){ int i, j, k; for(i=1; i<=r; i++) for(j=1; j<=c; j++) if(x[i][j] == 'R') { for(k=0; k

转载于:https://www.cnblogs.com/tigerisland/p/7563895.html

你可能感兴趣的文章
ansible 模块之 yum模块详解
查看>>
PhoneGap跨平台Android环境的搭建
查看>>
西北大学(Northwestern University)-大数据分析课程
查看>>
php框架-hoby
查看>>
7.1 vim编辑器
查看>>
bash 词频统计
查看>>
Python之转义字符表
查看>>
mysql并发插入重复数据问题的解决思路
查看>>
MySQL 5.7.x修改root默认密码(CentOS下)
查看>>
Linux下动态加载SO文件
查看>>
Mysql创建、删除用户
查看>>
我的友情链接
查看>>
MySQL-MySQL常用命令
查看>>
Linux iptraf 网络监控
查看>>
Swift::8::枚举
查看>>
ZABBIX web端 显示 server 运行状态 不
查看>>
Aspose.Words使用教程之在文档中找到并替换文本
查看>>
ORACLE官方文档如何学习
查看>>
google guava包集合类HashMultiset的基本用法
查看>>
linux 进程和线程
查看>>