高级光能
#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;
}
高级光能
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];
}
高级光能
楼主同学,这道题要每一层的起点是 (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;
}
我帮你实现了一个函数,剩下的你自己实现,好不好?加油少年!
高级光能
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;
}
修练者
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++;
}
}