算法1
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 110;
int a[N][N];
int main()
{
int n;
while(cin>>n,n)//输入一个数,且n不等于0,逗号表达式
{
for(int i = 1 ; i <= n ;i++)
{
// j表示从1开始的数,k表示在某一趟循环中的第几列或第几行
for(int j = 1, k = i ; k <= n; j ++, k ++)
{
a[i][k] = a[k][i] = j;
}
}
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<iostream>
using namespace std;
int main()
{
int n;
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;
}
算法2的规律是以每一行的对角线上的点为分界点,
分界点前的数是从大到小大,分界点后的数是从小到大
我们只需要按行来遍历输出即可
前半部分是j=i到1,后半部分是j=i+1到n,一行总共n个数
前半部分数的值就是下表值j
后半部分数的值j-i+1,因为一定是从2开始,我们可以从特殊值入手考虑这个取值。