解题思路:
要创建两个数组,一个存储每天没战斗前的,一个存战斗后的,因为只用一个数组的话,因为我们是遍历每一个元素,但战斗是同一时间开始的,就会出现剪刀先被石头占领,而剪刀附近有布,本该占领的剪刀却没了的情况,在第二天开始时,把战斗后的数组赋给战斗前的数组,这样来更新数组
注意事项:
参考代码:
#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 人评分
宏定义浏览:837 |
十->二进制转换 (C语言代码)浏览:1408 |
震宇大神的杀毒软件 (C语言代码)浏览:1241 |
钟神赛车 (C语言代码)浏览:879 |
C语言程序设计教程(第三版)课后习题7.4 (C语言代码)浏览:566 |
C语言程序设计教程(第三版)课后习题11.3 (C语言代码)浏览:1053 |
C语言程序设计教程(第三版)课后习题11.3 (C语言代码)浏览:739 |
C语言程序设计教程(第三版)课后习题11.1 (C语言代码)浏览:802 |
C语言训练-角谷猜想 (C语言代码)浏览:1705 |
【明明的随机数】 (C++代码)浏览:781 |