oj 1.8编程基础之多维数组 16:矩阵剪刀石头布

题目:


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


测试数据

3 3 2
RRS
PSR
PRR


 

wrong answer

3 3 2
RRS
PSR
PRR
every day answer is
PRR
SRR
PPR
every day answer is
PPR
SRR
PPR

通过这个数据我发现每一天过后,我要把tmp中的数据再次复制到arr中

下面是一个找错的代码,我去观察了每一天运行后的结果

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//代表:r石头,p布,s剪刀
int fightjudge(char ch1,char ch2)
{
    int flag;
    if(ch1=='R')
    {
        if(ch2=='R')
            flag=0;
        else if(ch2=='P')
            flag=-1;
        else
            flag=1;
    }
    else if(ch1=='P')
    {
         if(ch2=='P')
            flag=0;
        else if(ch2=='S')
            flag=-1;
        else
            flag=1;
    }
    else
    {
        if(ch2=='S')
            flag=0;
        else if(ch2=='R')
            flag=-1;
        else
            flag=1;
    }
    return flag;
}


void fight(char a[101][101],char tmp[101][101],int i,int j,int line,int row)
{
   if(i-1>=0)
   {
       if(fightjudge(a[i][j],a[i-1][j])==1)
       {
           tmp[i-1][j]=a[i][j];


       }
   }

       if(i+1<line)
       {
            if(fightjudge(a[i][j],a[i+1][j])==1)
           {
               tmp[i+1][j]=a[i][j];

           }
       }

       if(j-1>=0)
       {
            if(fightjudge(a[i][j],a[i][j-1])==1)
           {
               tmp[i][j-1]=a[i][j];

           }
       }

       if(j+1<row)
       {
                if(fightjudge(a[i][j],a[i][j+1])==1)
           {
               tmp[i][j+1]=a[i][j];

           }
       }


}

void copyit(char arr[101][101],char tmp[101][101],int line,int row)
{//哇塞,这里的arr中的大小要一直保持一致
    int i,j;
    printf("in the sub function tmp is \n");
    for(i=0;i<line;i++)
    {
        for(j=0;j<row;j++)
        {


            printf("%c",tmp[i][j]);

        }
        printf("\n");


    }//这个是来看子函数里面的tmp是否出错

    printf("in the sub function arr is \n");
     for(i=0;i<line;i++)
    {
        for(j=0;j<row;j++)
        {

            arr[i][j]=tmp[i][j];
            printf("%c",arr[i][j]);

        }
        printf("\n");


    }//这里是看子函数里面的arr是否正确

}




int main()
{
    int line,row;
    scanf("%d %d",&line,&row);
    int days;
    scanf("%d",&days);

    char arr[101][101],tmp[101][101];

    int i,j;

     for(i=0;i<line;i++)
    {  getchar();
        for(j=0;j<row;j++)
        {
            scanf("%c",&arr[i][j]);
            tmp[i][j]=arr[i][j];

        }


    }


    int n;

    for(n=0;n<days;n++)
    {
            for(i=0;i<line;i++)
            {
                for(j=0;j<row;j++)
                {
                     fight(arr,tmp,i,j,line,row);

                }

            }

            copyit(arr,tmp,line,row);

     printf("every day answer about arr is\n");
            for(i=0;i<line;i++)
            {
                for(j=0;j<row;j++)
                {
                    printf("%c",arr[i][j]);
                }
                printf("\n");
            }//单步查看,看一下那里会出错

     printf("every day answer about tmp is\n");
            for(i=0;i<line;i++)
            {
                for(j=0;j<row;j++)
                {
                    printf("%c",tmp[i][j]);
                }
                printf("\n");
            }


    }
      return 0;
}

最终的代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//代表:r石头,p布,s剪刀
int fightjudge(char ch1,char ch2)
{
    int flag;
    if(ch1=='R')
    {
        if(ch2=='R')
            flag=0;
        else if(ch2=='P')
            flag=-1;
        else
            flag=1;
    }
    else if(ch1=='P')
    {
         if(ch2=='P')
            flag=0;
        else if(ch2=='S')
            flag=-1;
        else
            flag=1;
    }
    else
    {
        if(ch2=='S')
            flag=0;
        else if(ch2=='R')
            flag=-1;
        else
            flag=1;
    }
    return flag;
}


void fight(char a[101][101],char tmp[101][101],int i,int j,int line,int row)
{
   if(i-1>=0)
   {
       if(fightjudge(a[i][j],a[i-1][j])==1)
       {
           tmp[i-1][j]=a[i][j];


       }
   }

       if(i+1<line)
       {
            if(fightjudge(a[i][j],a[i+1][j])==1)
           {
               tmp[i+1][j]=a[i][j];

           }
       }

       if(j-1>=0)
       {
            if(fightjudge(a[i][j],a[i][j-1])==1)
           {
               tmp[i][j-1]=a[i][j];

           }
       }

       if(j+1<row)
       {
                if(fightjudge(a[i][j],a[i][j+1])==1)
           {
               tmp[i][j+1]=a[i][j];

           }
       }


}

void copyit(char arr[101][101],char tmp[101][101],int line,int row)
{//哇塞,这里的arr中的大小要一直保持一致
    int i,j;



     for(i=0;i<line;i++)
    {
        for(j=0;j<row;j++)
        {

            arr[i][j]=tmp[i][j];

        }



    }

}




int main()
{
    int line,row;
    scanf("%d %d",&line,&row);
    int days;
    scanf("%d",&days);

    char arr[101][101],tmp[101][101];

    int i,j;

     for(i=0;i<line;i++)
    {  getchar();
        for(j=0;j<row;j++)
        {
            scanf("%c",&arr[i][j]);
            tmp[i][j]=arr[i][j];

        }


    }


    int n;

    for(n=0;n<days;n++)
    {
            for(i=0;i<line;i++)
            {
                for(j=0;j<row;j++)
                {
                     fight(arr,tmp,i,j,line,row);

                }

            }

            copyit(arr,tmp,line,row);



    }
    for(i=0;i<line;i++)
        {
            for(j=0;j<row;j++)
            {
                printf("%c",tmp[i][j]);
            }
            printf("\n");
        }

      return 0;
}

相关推荐

  1. oj 1.8编程基础 16:矩阵剪刀石头

    2023-12-28 12:24:02       53 阅读
  2. oj 1.8编程基础 12:变幻的矩阵

    2023-12-28 12:24:02       56 阅读
  3. oj 1.8编程基础 14:扫雷游戏地雷计算

    2023-12-28 12:24:02       64 阅读
  4. oj 1.8编程基础 13:图像模糊处理

    2023-12-28 12:24:02       57 阅读
  5. oj 1.8编程基础 07:矩阵归零消减序列和

    2023-12-28 12:24:02       58 阅读
  6. oj 1.8编程基础 24:蛇形填充数组

    2023-12-28 12:24:02       57 阅读
  7. C基础入门题:石头剪刀

    2023-12-28 12:24:02       25 阅读
  8. 【华为OD真题 Python】石头剪刀游戏

    2023-12-28 12:24:02       61 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-28 12:24:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-28 12:24:02       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-28 12:24:02       82 阅读
  4. Python语言-面向对象

    2023-12-28 12:24:02       91 阅读

热门阅读

  1. 使用Docker快速安装grafana

    2023-12-28 12:24:02       60 阅读
  2. 【数值分析】乘幂法,matlab实现

    2023-12-28 12:24:02       49 阅读
  3. ES6新增的 Symbol

    2023-12-28 12:24:02       65 阅读
  4. 【算法题】24. 两两交换链表中的节点

    2023-12-28 12:24:02       58 阅读
  5. ansible加密

    2023-12-28 12:24:02       42 阅读