Bart的妹妹Lisa在一个二维矩阵上创造了新的文明。矩阵上每个位置被三种生命形式之一占据:石头,剪刀,布。每天,上下左右相邻的不同生命形式将会发生战斗。在战斗中,石头永远胜剪刀,剪刀永远胜布,布永远胜石头。每场战斗结束之后,败者的领地将被胜者占领。元素都按照从左到右,从上到下的顺序依次进行战斗,元素战斗顺序是按照上,右,下,左的顺序进行。不管是胜利还是失败都要进行完所有的战斗,才会进入下一个元素的战斗。
你的工作是计算出n天之后矩阵的占据情况。
输入格式
第一行包含三个正整数r,c,n,分别表示矩阵的行数、列数以及天数。每个整数均不超过100。
接下来r行,每行c个字符,描述矩阵初始时被占据的情况。每个位置上的字符只能是R,S,P三者之一,分别代表石头,剪刀,布。相邻字符之间有空格。
输出格式
输出n天之后的矩阵占据情况。每个位置上的字符只能是R,S,P三者之一,相邻字符之间无空格。
输入样例 复制
3 3 1
R R R
R S R
R R R
输出样例 复制
RRR
RRR
RRR
#include<iostream>
using namespace std;
int n,m,t;//全局变量初始为0;
//
// 上 右 下 左
int d[4][2] = {{-1,0},{0,1},{1,0},{0,-1}};
//赋初始值
//-1 0 行列加多少或减多少变化值记录
//0,1 右边加多少或减多少变化值记录
//1,0 左边加多少或减多少变化值记录
//0.-1 行列加多少或减多少变化值记录
char a[100][100];
int main(){
cin>>n>>m>>t;//行,列,天数
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>a[i][j];//输入
}
}
for(int k=1;k<=t;k++){//天数循环,每天战斗一轮
//每一个格子
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
//i,j 每一个格子
//四个方向
for(int p=0;p<4;p++){
int nexti = i+d[p][0];
int nextj = j+d[p][1];
//四个坐标
if(nexti>=0 && nextj<n && nextj>=0 && nextj<m){//防止越界 下标有效
if(a[i][j] == 'R' && a[nexti][nextj] == 'S' || a[i][j] == 'S' && a[nexti][nextj] == 'P' ||a[i][j] == 'P' && a[nexti][nextj] == 'R' ){
a[nexti][nextj] = a[i][j];
}else if(a[i][j] == 'S' && a[nexti][nextj] == 'R' || a[i][j] == 'P' && a[nexti][nextj] == 'S' ||a[i][j] == 'R' && a[nexti][nextj] == 'P' ){//输了
a[i][j] = a[nexti][nextj];
}
}
}
}
}
}
for(int i=0;i<n;i++){//输出
for(int j=0;j<m;j++){
cout<<a[i][j];
}
cout<<endl;
}
return 0;
}
我都写批注了,大家自己看