找规律,多列几个,注意遇到边界如何处理
#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; } }