算法1(从左向右,从上到下延伸)
#include<bits/stdc++.h>
using namespace std;
const int N=110;
int a[N][N];
int n;
int main()
{
while(cin>>n,n)
{
for(int i=1;i<=n;i++)
for(int j=i,k=1;j<=n;j++,k++)
{
a[i][j] = k;
a[j][i] = k;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cout<<a[i][j]<<' ';
cout<<endl;
}
cout<<endl;
}
return 0;
算法2(将矩阵分为两个部分,对角线左边从大到小,对角线右边从小到大)
#include<bits/stdc++.h>
using namespace std;
int n;
int main()
{
while(cin>>n,n)
{
for(int i=1;i<=n;i++)
{
for(int j=i;j>=1;j--) cout<<j<<' ';
for(int j=i+1;j<=n;j++) cout<<j-i+1<<' ';
cout<<endl;
}
cout<<endl;
}
return 0;
}
算法3(每个元素都等于|i-j|+1)
#include<bits/stdc++.h>
using namespace std;
int n;
int main()
{
while(cin>>n,n)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cout<<abs(i-j)+1<<' ';
cout<<endl;
}
cout<<endl;
}
return 0;
}