问题标题: 1742   生日游戏

0
0
已解决
张瑀涵
张瑀涵
高级光能
高级光能

#include<iostream>
using namespace std;
int main()
{
 int a[110][110]={0},b[110][110],m,i,j,n,count=1,x=1,y,visited[110][110]={0};
 cin>>n>>m;
 for(i=1;i<=n;i++)
 {
  for(j=1;j<=m;j++)
   cin>>b[i][j];
 }
 y=1;
 while(count<=n*m)
 {
  while(y<=m&&visited[x][y]==0) 
  {
   a[x][count%m]=b[x][y];
   visited[x][y]=1;
   y++;
   count++;
  }
  x++;y--;
  while(x<=n&&visited[x][y]==0)
  {
   a[count%n][y]=b[x][y];
   visited[x][y]=1;
   x++;
   count++;
  }
  x--;y--;
        while(y>=1&&visited[x][y]==0)
  {
   a[x][count%m]=b[x][y];
   visited[x][y]=1;
   y--;
   count++;
  }
  x--;y++;
  while(x>=1&&visited[x][y]==0)
  {
   a[count%n][y]=b[x][y];
   visited[x][y]=1;
   x--;
   count++;
  }
  x++;y++;
 }
 for(i=1;i<=n;i++)
 {
  for(j=1;j<=m;j++)
  {
   cout<<a[i][j]<<" ";
  }
  cout<<endl;
 }
 return 0;
}


0
已采纳
梁锦程
梁锦程
高级光能
高级光能
void work(int n,int m) 
{
    int i,j,x=0,y=1;
    for(i=1;i<=n/2;i++)
    {
        for(j=i;j<=m-i;j++)
            b[++x]=a[i][j];
        for(j=i;j<=n-i;j++)
            b[++x]=a[j][m-i+1];
        for(j=m-i+1;j>=i+1;j--)
            b[++x]=a[n-i+1][j];
        for(j=n-i+1;j>=i+1;j--)
            b[++x]=a[j][i];
    }
    if(n%2)
        for(int j=n/2+1;j<=m-(n/2+1)+1;j++)
            b[++x]=a[n/2+1][j];
}

 

1
1
梁锦程
梁锦程
高级光能
高级光能

楼主同学,这道题要每一层的起点是 (i,i),分为两类,但要判断奇数偶数的情况,n是偶数,i的范围是 1--n/2,否则i的范围是1--n/2+1

#include<iostream>
using namespace std;
int a[1000][1000];
void foo1(int n,int m)  //n<=m 行小于等于列 
{
    for(int i=1;i<=n/2;i++)
    {
        int j=i;
        for(int j=i;j<=m-i;j++)
            cout<<a[i][j]<<' ';
        for(int j=i;j<=n-i;j++)
            cout<<a[j][m-i+1]<<' ';
        for(int j=m-i+1;j>=i+1;j--)
            cout<<a[n-i+1][j]<<' ';
        for(int j=n-i+1;j>=i+1;j--)
            cout<<a[j][i]<<' '; 
}
if(n%2)
{

for(int j=n/2+1;j<=m-(n/2+1)+1;j++)
{
cout<<a[n/2+1][j]<<' ';
}
}
}
void foo2(int n,int m)
{

}
int main()
{
int n,m,i,j;
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
    foo1(n,m);
return 0;
}

我帮你实现了一个函数,剩下的你自己实现,好不好?加油少年!

0
0
梁锦程
梁锦程
高级光能
高级光能

int main()
{
    int n,m,i,j;
    cin>>n>>m;
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            cin>>a[i][j];
    work(n,m);
    for(int i=1;i<=n*m;i++)
    {
        cout<<b[i]<<' ';
        if(i%m==0)
            cout<<endl;
    }
    return 0;
}

0
宫西诚
宫西诚
修练者
修练者

for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++) cin>>a[i][j];
    }
    while (count<n*m)
    {
        while(y+1<=m&&a[x][y+1]!=-1)
        {
            if(sum==m)
            {
                cout<<endl;
                sum=0;
            }
            cout<<a[x][++y]<<" ";
            a[x][y]=-1;
            count++;
            sum++;
        }
        while(x+1<=n&&a[x+1][y]!=-1)
        {
            if(sum==m)
            {
                cout<<endl;
                sum=0;
            }
            cout<<a[++x][y]<<" ";
            a[x][y]=-1;
            count++;
            sum++;
        }
        while(y-1>=1&&a[x][y-1]!=-1)
        {
            if(sum==m)
            {
                cout<<endl;
                sum=0;
            }
            cout<<a[x][--y]<<" ";
            a[x][y]=-1;
            count++;
            sum++;
        }
        while(x-1>=1&&a[x-1][y]!=-1)
        {
            if(sum==m)
            {
                cout<<endl;
                sum=0;
            }
            cout<<a[--x][y]<<" ";
            a[x][y]=-1;
            count++;
            sum++;
        }
    }

0
我要回答