解题思路:
要创建两个数组,一个存储每天没战斗前的,一个存战斗后的,因为只用一个数组的话,因为我们是遍历每一个元素,但战斗是同一时间开始的,就会出现剪刀先被石头占领,而剪刀附近有布,本该占领的剪刀却没了的情况,在第二天开始时,把战斗后的数组赋给战斗前的数组,这样来更新数组
注意事项:

参考代码:

#include<stdio.h>
#include<string.h>
void dfs(int row,int column,int r,int c,char s1[101][101],char (*s)[101])//对上下左右遍历
{
    int rx[4]={1,-1,0,0};
    int cy[4]={0,0,1,-1};
    for(int i=0;i<4;i++)
    {
        int new_row=row+rx[i];
        int new_column=column+cy[i];
        if(new_row>=0&&new_row<r&&new_column>=0&&new_column<c)
        {
            if(s1[row][column]=='R'&&s1[new_row][new_column]=='S')//石头赢剪刀
            {
                s[new_row][new_column]='R';
            }
            else if(s1[row][column]=='S'&&s1[new_row][new_column]=='P')//剪刀赢布
            {
                s[new_row][new_column]='S';
            }
            else if(s1[row][column]=='P'&&s1[new_row][new_column]=='R')//布赢石头
            {
                s[new_row][new_column]='P';
            }
        }
        
    }
}
void fight(char s1[101][101],char (*s)[101],int r,int c)//对每个元素遍历
{
    
    for(int i=0;i<r;i++)
    {
        for(int j=0;j<c;j++)
        {
            dfs(i,j,r,c,s1,s);
        }
    }
}
int main()
{
	int r,c,n;
	scanf("%d%d%d",&r,&c,&n);
	char s[101][101];
	char s1[101][101];
	for(int i=0;i<r;i++)
	{
	    scanf("%s",s[i]);
	}
	for(int i=0;i<n;i++)
	{
	    for(int j=0;j<r;j++)
	    {
	        strcpy(s1[j],s[j]);//字符串复制函数,把s的每一行赋给s1,s1存储一开始的数组,
	        
	    }
	    fight(s1,s,r,c);
	    
	}
	for(int i=0;i<r;i++)
	puts(s[i]);
	return 0;
}


 

0.0分

8 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区