找规律,多列几个,注意遇到边界如何处理
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int a[n+1][n+1];
memset(a,0,sizeof(a));
int i=1,j=1,k=1;
a[i][j]=k;
k++;
while(k<=n*n)
{
if(i==1&&j!=n)//除了j=n,属于j等于n的情况,其他交叉情况都按i=1处理,
{
a[i][++j]=k;//先右移一个
k++;
while(i!=n&&j!=1)//左斜下移
{
a[++i][--j]=k;
k++;
}
}
else if(i==n)
{
a[i][++j]=k;//右移一个
k++;
while(i!=1&&j!=n)//右斜上移
{
a[--i][++j]=k;
k++;
}
}
else if(j==1)
{
a[++i][j]=k;//下移一个
k++;
while(i!=1&&j!=n)//右斜上移
{
a[--i][++j]=k;
k++;
}
}
else if(j==n)
{
a[++i][j]=k;//下移一个
k++;
while(i!=n&&j!=1)//左斜下移
{
a[++i][--j]=k;
k++;
}
}
}
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
{
cout<<a[i][j]<<" ";
}
cout<<endl;
}
}



京公网安备 11010502036488号