CCF NOI1057 石头剪刀布
问题链接: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 石头剪刀布相关推荐
- CCF CSP 201609-2 火车购票
题目链接:http://118.190.20.162/view.page?gpid=T46 问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配. 假设一节车厢有20排.每一排 ...
- ccf Markdown
说实话,这种题如果给我返回结果我是一定可以写出来的但是ccf不返回结果很烦,这种题我根本不能一次写对.还有重写时发现好多考试之前根本没注意到的点比如删掉空行 .......=_= #include&l ...
- I'm stuck! ccf模拟题。
ccf模拟题. I'm stuck! 时间限制: 1.0s 内存限制: 256.0MB 问题描述 给定一个R行C列的地图,地图的每一个方格可能是'#', '+', '-', '|', '.', 'S' ...
- 计算机协会成立活动简报,“中国计算机学会CCF走进高校”活动在我校举行
校新闻中心讯 9月13日下午,由中国计算机学会(CCF)主办的"CCF走进河南科技大学"活动在工科二号楼610举行.副校长魏世忠教授出席活动并致辞.长江学者.国家杰出青年基金获得者 ...
- 石头剪刀布python代码_我的第一个python程序,石头剪刀布猜拳游戏
从决定学习python到今天,已经过去了好1个月,买的几本书还没一本看完的,惭愧. 忙不是借口,是时候来点计划,来点坚持.写点什么吧,算是学习的记录,也是对自己的鞭策. 今天写一个猜字游戏,模仿正在读 ...
- 绿盟科技与CCF成立“鲲鹏”科研基金 计划发力5大领域资助16个项目
[51CTO.com原创稿件]2017年5月10日,由中国计算机学会(CCF)和北京神州绿盟信息安全科技股份有限公司(以下简称:绿盟科技)主办的2017 CCF-绿盟科技"鲲鹏"科 ...
- WC2018 CCF程序设计教学比赛记事
WC2018 d5 教师比赛日 亦或者称之为以"递归"为主题的同课异构课程(25节课 有8节讲递归) 发现强省或者弱省中名校派出的选手还是非常优秀的,这种优秀,从他的教态.自 ...
- 徐韬:CCF - 个贷违约预测Baseline
徐韬是华北电力大学数理系大四的学生,Datawhale成员/Dreamtech成员,参加了多期Datawhale的组队学习,也在天池/CCF/讯飞等比赛中取得了不错的成绩,现保送大连理工大学软件学院深 ...
- 赴约北大,2019 CCF大数据与计算智能大赛正式启动
8月17日,以"数据驱动,智创未来"为主题的2019 CCF大数据与计算智能大赛(2019 CCF BDCI)全球启动仪式,在北京大学英杰交流中心·阳光厅正式启幕.自2013年创办 ...
最新文章
- vs 更换cuda版本笔记
- 图解基本C语言程序一
- 如何更改已生成的APK的APP名字?
- 一场不期而遇的美好 当无线遇上大数据
- HTML5调用手机前置摄像头或后置摄像头拍照,canvas显示,经过Android测试
- redis-cli使用密码登录
- 20道JS原理题助你面试一臂之力!
- HTML的块级元素和行级元素的标签列表
- 另一种声音:容器是不是未来?
- 【JZOF】已知前序遍历和中序遍历,求出其后序遍历
- 数学建模-lingo使用
- 静态页面模板,比较不错的网站,效果比较多,html代码可以直接下载即可
- nginx 上传文件漏洞_nginx 0day漏洞 上传图片可入侵百万台服务器
- Python+matplotlib绘制极坐标柱状图(南丁格尔玫瑰图)
- python 对象的销毁_python对象销毁(垃圾回收)
- SylixOS ECS 启动过程
- tipask二次开发总结_WeCenter和Tipask的智能问答系统的区别
- linux系统程序问题报告,Linux程序设计实验报告.docx
- 数学建模超细致讲解,从建立模型到论文写作
- 前端开发_HTML5_CSS部分-背景(background)
热门文章
- StarlingMVC:为Starling量身打造的MVC框架
- AS:Flash AS3中获取浏览器信息及URL相关参数(并非swf url地址)
- python怎样播放音乐_Python如何播放音乐?
- 个人优盘更新涉密计算机病毒库,在涉密计算机和非涉密计算机之间交叉使用优盘、移动硬盘等移动存储介质时,只要及时升级杀毒软件病毒库,就不会造成泄密 - 作业在线问答...
- android 分割字符 指定长度_[Android]TextUtils.ellipsize()截取指定长度字符串(附图文混排)...
- 小区重选优先级_NR小区重选理论研究
- Doris之Bitmap 索引
- 包装类(Wrapper)的使用
- python自定义抛出异常信息_浅谈python抛出异常、自定义异常, 传递异常
- 定义并调用函数 十进制转二进制_用‘栈的思想编写一个十进制转换二进制、八进制或十六进制的程序...