打印一个n*n的数字方阵,例如n=4时:(n<=100)
1 3 4 10
2 5 9 11
6 8 12 15
7 13 14 16
方法一:
#include <iostream>
using namespace std;
#define N 100
int a[N][N];
int main(void)
{
int n, i, j, val, n1;
cin>>n;
//左上的三角
val = 1;
for(i=0;i<n;i++)
for(j=0;j<=i;j++)
{
if(i%2) a[i-j][j] = val;
else a[j][i-j] = val;
val++;
}
val=n*n;
n1=n-1;
for(i=0;i<n1;i++)
for(j=0;j<=i;j++)
{
if(i%2) a[n1-i+j][n1-j] = val;
else a[n1-j][n1-i+j] = val;
val--;
}
for(i=0; i<n; i++)
{
for(j=0;j<n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
return 0;
}
/************************************************************************************************************/
#include <stdio.h>
int main(){
int n,num[101][101],s=1;
scanf("%d",&n);
for(int i=0;i<n;i++)
for(int j=0;j<=i;j++)
if(i%2==0)num[j][i-j]=s++; else num[i-j][j]=s++;
for(int i=n;i<2*n-1;i++)
for(int j=i-n+1;j<n;j++)
if(i%2==0)num[j][i-j]=s++; else num[i-j][j]=s++;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++) printf("%d ",num[i][j]);
printf("\n");
}
return 0;
}
方法二:
#include <iostream>
using namespace std;
int f[100][100];
int main (){
int n,i=0,j=0,a=1,flag;cin>>n;
while(i!=n-1||j!=n-1){
f[0][0]=1;
if(j==0&&i<n-1){
f[++i][j]=++a;
while(i>0&&j<n-1)f[--i][++j]=++a;
continue;
}
if(i==0&&j<n-1){
f[i][++j]=++a;
while(i<n-1&&j>0)f[++i][--j]=++a;
continue;
}
if(j==n-1){
f[++i][j]=++a;
while(i<n-1&&j>0)f[++i][--j]=++a;
continue;
}
if(i==n-1){
f[i][++j]=++a;
while(i>0&&j<n-1)f[--i][++j]=++a;
continue;
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++)
cout<<f[i][j]<<" ";
cout<<endl;
}
return 0;
}