问题链接:CCF NOI1057 石头剪刀布



时间限制: 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分通过的C语言程序:

#include <stdio.h>
#include <string.h>struct _around {int drow;int dcol;
} around[] = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}};
#define AN 4#define N 100
char 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<AN; k++)if(x[i + around[k].drow][j + around[k].dcol] == 'S')y[i + around[k].drow][j + around[k].dcol] = 'R';} else if(x[i][j] == 'S') {for(k=0; k<AN; k++)if(x[i + around[k].drow][j + around[k].dcol] == 'P')y[i + around[k].drow][j + around[k].dcol] = 'S';} else if(x[i][j] == 'P') {for(k=0; k<AN; k++)if(x[i + around[k].drow][j + around[k].dcol] == 'R')y[i + around[k].drow][j + around[k].dcol] = 'P';}
}int main(void)
{int r, c, n, i, j, k;memset(a, 0, sizeof(a));scanf("%d%d%d", &r, &c, &n);for(i=1; i<=r; i++)scanf("%s", a[i]+1);memcpy(b, a, sizeof(a));for(k=1; k<=n; k++)if(k & 1) {doit(a, b, r, c);memcpy(a, b, sizeof(a));} else {doit(b, a, r, c);memcpy(b, a, sizeof(a));}for(i=1; i<=r; i++) {for(j=1; j<=c; j++)printf("%c", a[i][j]);printf("\n");}return 0;
}

CCF NOI1057 石头剪刀布相关推荐

  1. CCF CSP 201609-2 火车购票

    题目链接:http://118.190.20.162/view.page?gpid=T46 问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配. 假设一节车厢有20排.每一排 ...

  2. ccf Markdown

    说实话,这种题如果给我返回结果我是一定可以写出来的但是ccf不返回结果很烦,这种题我根本不能一次写对.还有重写时发现好多考试之前根本没注意到的点比如删掉空行 .......=_= #include&l ...

  3. I'm stuck! ccf模拟题。

    ccf模拟题. I'm stuck! 时间限制: 1.0s 内存限制: 256.0MB 问题描述 给定一个R行C列的地图,地图的每一个方格可能是'#', '+', '-', '|', '.', 'S' ...

  4. 计算机协会成立活动简报,“中国计算机学会CCF走进高校”活动在我校举行

    校新闻中心讯 9月13日下午,由中国计算机学会(CCF)主办的"CCF走进河南科技大学"活动在工科二号楼610举行.副校长魏世忠教授出席活动并致辞.长江学者.国家杰出青年基金获得者 ...

  5. 石头剪刀布python代码_我的第一个python程序,石头剪刀布猜拳游戏

    从决定学习python到今天,已经过去了好1个月,买的几本书还没一本看完的,惭愧. 忙不是借口,是时候来点计划,来点坚持.写点什么吧,算是学习的记录,也是对自己的鞭策. 今天写一个猜字游戏,模仿正在读 ...

  6. 绿盟科技与CCF成立“鲲鹏”科研基金 计划发力5大领域资助16个项目

    [51CTO.com原创稿件]2017年5月10日,由中国计算机学会(CCF)和北京神州绿盟信息安全科技股份有限公司(以下简称:绿盟科技)主办的2017 CCF-绿盟科技"鲲鹏"科 ...

  7. WC2018 CCF程序设计教学比赛记事

    WC2018   d5 教师比赛日  亦或者称之为以"递归"为主题的同课异构课程(25节课 有8节讲递归) 发现强省或者弱省中名校派出的选手还是非常优秀的,这种优秀,从他的教态.自 ...

  8. 徐韬:CCF - 个贷违约预测Baseline

    徐韬是华北电力大学数理系大四的学生,Datawhale成员/Dreamtech成员,参加了多期Datawhale的组队学习,也在天池/CCF/讯飞等比赛中取得了不错的成绩,现保送大连理工大学软件学院深 ...

  9. 赴约北大,2019 CCF大数据与计算智能大赛正式启动

    8月17日,以"数据驱动,智创未来"为主题的2019 CCF大数据与计算智能大赛(2019 CCF BDCI)全球启动仪式,在北京大学英杰交流中心·阳光厅正式启幕.自2013年创办 ...

最新文章

  1. vs 更换cuda版本笔记
  2. 图解基本C语言程序一
  3. 如何更改已生成的APK的APP名字?
  4. 一场不期而遇的美好 当无线遇上大数据
  5. HTML5调用手机前置摄像头或后置摄像头拍照,canvas显示,经过Android测试
  6. redis-cli使用密码登录
  7. 20道JS原理题助你面试一臂之力!
  8. HTML的块级元素和行级元素的标签列表
  9. 另一种声音:容器是不是未来?
  10. 【JZOF】已知前序遍历和中序遍历,求出其后序遍历
  11. 数学建模-lingo使用
  12. 静态页面模板,比较不错的网站,效果比较多,html代码可以直接下载即可
  13. nginx 上传文件漏洞_nginx 0day漏洞 上传图片可入侵百万台服务器
  14. Python+matplotlib绘制极坐标柱状图(南丁格尔玫瑰图)
  15. python 对象的销毁_python对象销毁(垃圾回收)
  16. SylixOS ECS 启动过程
  17. tipask二次开发总结_WeCenter和Tipask的智能问答系统的区别
  18. linux系统程序问题报告,Linux程序设计实验报告.docx
  19. 数学建模超细致讲解,从建立模型到论文写作
  20. 前端开发_HTML5_CSS部分-背景(background)

热门文章

  1. StarlingMVC:为Starling量身打造的MVC框架
  2. AS:Flash AS3中获取浏览器信息及URL相关参数(并非swf url地址)
  3. python怎样播放音乐_Python如何播放音乐?
  4. 个人优盘更新涉密计算机病毒库,在涉密计算机和非涉密计算机之间交叉使用优盘、移动硬盘等移动存储介质时,只要及时升级杀毒软件病毒库,就不会造成泄密 - 作业在线问答...
  5. android 分割字符 指定长度_[Android]TextUtils.ellipsize()截取指定长度字符串(附图文混排)...
  6. 小区重选优先级_NR小区重选理论研究
  7. Doris之Bitmap 索引
  8. 包装类(Wrapper)的使用
  9. python自定义抛出异常信息_浅谈python抛出异常、自定义异常, 传递异常
  10. 定义并调用函数 十进制转二进制_用‘栈的思想编写一个十进制转换二进制、八进制或十六进制的程序...