posts - 21,  comments - 9,  trackbacks - 0

这是一道模拟题。说白了就是石头剪子布的问题。此题的关键点是要开两个数组。一个是原来的。一个是改动后的,每次改动完之后都要用改动之后的初始化原来的一次。下面请看代码。我把函数分的比较详细。便于大家阅读。
#include<iostream>
using namespace std;
char array[102][102];
char temp[102][102];
int r,c,n;
void init()
{
 int i,j;
 for( i=1;i<=r;i++)
  {
   for( j=1;j<=c;j++)
   {
    array[i][j]=temp[i][j];
   }
  }
}
void change(int i,int j)
{
 if(array[i][j]=='R')
 {
  if(i>1&&array[i-1][j]=='S')
   temp[i-1][j]='R';
  if(i+1<=r&&array[i+1][j]=='S')
   temp[i+1][j]='R';
  if(j>1&&array[i][j-1]=='S')
    temp[i][j-1]='R';
  if(j+1<=c&&array[i][j+1]=='S')
    temp[i][j+1]='R';
 }
 else
  if(array[i][j]=='P')
 {
  if(i>1&&array[i-1][j]=='R')
   temp[i-1][j]='P';
  if(i+1<=r&&array[i+1][j]=='R')
    temp[i+1][j]='P';
  if(j>1&&array[i][j-1]=='R')
    temp[i][j-1]='P';
  if(j+1<=c&&array[i][j+1]=='R')
    temp[i][j+1]='P';
 }
 else
  if(array[i][j]=='S')
 {
  if(i>1&&array[i-1][j]=='P')
   temp[i-1][j]='S';
  if(i+1<=r&&array[i+1][j]=='P')
    temp[i+1][j]='S';
  if(j>1&&array[i][j-1]=='P')
    temp[i][j-1]='S';
  if(j+1<=c&&array[i][j+1]=='P')
    temp[i][j+1]='S';
 }
}
void occupy()
{
 int i,j;
 while(n--)
 {
  for(i=1;i<=r;i++)
   {
    for(j=1;j<=c;j++)
    {
     change(i,j);     
    }
   }
  init();
 }

}
int main()
{
 int test;
 cin>>test;
 int i,j;
 while(test--)
 {
  cin>>r>>c>>n;
  for( i=1;i<=r;i++)
  {
   for( j=1;j<=c;j++)
   {
    cin>>array[i][j];
    temp[i][j]=array[i][j];
   }
  }
  /////////////OK 输入字符完毕。
  occupy();
  for( i=1;i<=r;i++)
  {
   for( j=1;j<=c;j++)
   {
    cout<<array[i][j];
   }
   cout<<endl;
  }
  if(test!=0)
   cout<<endl;
 }
 return 0;
}

posted on 2010-08-18 16:13 崔佳星 阅读(1005) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2010年8月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

常用链接

留言簿(1)

随笔分类

随笔档案

文章分类

文章档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜