当前位置: 首页 > article >正文

OpenJudge NOI 1.8 16:矩阵剪刀石头布 c语言

描述

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
#include <stdio.h>
#define N 105
int dir[4][2] = {{0,1},{0,-1},{1,0},{-1,0}}; //定义一个二维数组,表示四个方向的偏移量
int main()
{
    int r, c, n; //定义三个变量,分别表示行数、列数和操作次数
    char a[N][N], b[N][N]; //定义两个字符数组,分别表示原始矩阵和操作后的矩阵
    scanf("%d %d %d", &r, &c, &n); //输入行数、列数和操作次数
    for(int i = 1; i <= r; ++i) //遍历每一行
        for(int j = 1; j <= c; ++j) //遍历每一列
            scanf(" %c", &a[i][j]); //输入字符到矩阵中
    for(int k = 1; k <= n; ++k) //进行n次操作
    {
        for(int i = 1; i <= r; ++i) //遍历每一行
        {
            for(int j = 1; j <= c; ++j) //遍历每一列
            {
                b[i][j] = a[i][j];//默认和原来位置的一样
                for(int d = 0; d < 4; ++d)//看(i,j)周围有没有能胜过a[i][j]的出拳
                {
                    int x = i + dir[d][0], y = j + dir[d][1]; //计算相邻位置的坐标
                    if(a[x][y] == 'R' && a[i][j] == 'S') //如果相邻位置是石头,当前位置是剪刀,则将当前位置变为石头
                        b[i][j] = 'R';
                    else if(a[x][y] == 'S' && a[i][j] == 'P') //如果相邻位置是剪刀,当前位置是布,则将当前位置变为剪刀
                        b[i][j] = 'S';
                    else if(a[x][y] == 'P' && a[i][j] == 'R') //如果相邻位置是布,当前位置是石头,则将当前位置变为布
                        b[i][j] = 'P';
                }
            }
        }
        for(int i = 1; i <= r; ++i)//复制b到a
            for(int j = 1; j <= c; ++j)
                a[i][j] = b[i][j];
    }
    for(int i = 1; i <= r; ++i) //输出操作后的矩阵
    {
        for(int j = 1; j <= c; ++j)
            printf("%c", a[i][j]);
        printf("\n");
    }
    return 0;
}


http://www.kler.cn/a/148050.html

相关文章:

  • ABC334
  • DOM 规范 — MutationObserver 接口
  • ReactPress技术揭秘
  • FFmpeg 4.3 音视频-多路H265监控录放C++开发十三:将AVFrame转换成AVPacket。视频编码原理.编码相关api
  • 【Vue】Vue3.0(二十一)Vue 3.0中 的$event使用示例
  • 服务号消息折叠折射出的腾讯傲慢:上云会不会也一样?
  • SpringBoot趣探究--1.logo是如何打印出来的
  • 抖音视频如何无水印下载,怎么批量保存主页所有视频没水印?
  • Linux下unzip解压乱码问题的解决
  • Go 中切片(Slice)的长度与容量
  • spring JdbcTemplate 快速入门
  • JavaScript创建枚举
  • 解决:javax.websocket.server.ServerContainer not available 报错问题
  • 函数声明与函数表达式
  • uniapp之Vue3配置跨域(代理)
  • [RK-Linux] recovery分区详解(二)
  • harmonyos应用开发者高级认证考试部分答案
  • 配置ssh 免密登录 还是要密码才能登录
  • 二次开发问题汇总【C#】
  • MySQL进阶-InnoDB引擎
  • 全新付费进群系统源码 完整版教程
  • 数字人对本地生活商家的影响和应用
  • 竞赛选题 题目:基于LSTM的预测算法 - 股票预测 天气预测 房价预测
  • Rust语言入门教程(五) - 流控制语句
  • vue 中 js 金额数字转中文
  • 其利天下技术总监冯建武受邀出席“2023年电子工程师大会”并作主题演讲