矩阵剪刀石头布
描述
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
题意
给出矩阵的行数、列数以及天数,输出n天之后的矩阵占据情况。
解题思路
先用第一个for循环输入题目给定矩阵,再用第二个for循环把R,S,P三者与其各上下左右的相邻的不同生命形式发生战斗(石头永远胜剪刀,剪刀永远胜布,布永远胜石头),用一个for循环把b数组复制到a数组,最后用一个for循环输出b数组。
代码实现
#include<bits/stdc++.h>
using namespace std;
char a[110][110],b[110][110];
int n,m,t;
int main(){
cin>>n>>m>>t;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];//输入给定矩阵
b[i][j]=a[i][j];//把a数组复制到b数组这样就能解决平局问题
}
}
for(int k=1;k<=t;k++){
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i][j]=='R'){//石头永远胜剪刀,所以如果石头其上下左右有一位置是剪刀,那么剪刀的位置将被石头占领,所以输出石头
if(a[i-1][j]=='S'){
b[i-1][j]='R';
}
if(a[i+1][j]=='S'){
b[i+1][j]='R';
}
if(a[i][j-1]=='S'){
b[i][j-1]='R';
}
if(a[i][j+1]=='S'){
b[i][j+1]='R';
}
}
if(a[i][j]=='S'){//剪刀永远胜布,所以如果剪刀其上下左右有一位置是布,那么布的位置将被剪刀占领,所以输出剪刀
if(a[i-1][j]=='P'){
b[i-1][j]='S';
}
if(a[i+1][j]=='P'){
b[i+1][j]='S';
}
if(a[i][j-1]=='P'){
b[i][j-1]='S';
}
if(a[i][j+1]=='P'){
b[i][j+1]='S';
}
}
if(a[i][j]=='P'){//布永远胜石头,所以如果布其上下左右有一位置是石头,那么石头的位置将被布占领,所以输出布
if