$时间复杂度:O(n^2)\\\\
\color{red}{如果学过线性代数的话,这道题的规律就显而易见了,可以当作对称矩阵来解题} \\\\
\color{blue}{对于对称矩阵:}
A=
\left\(
\begin{matrix}
a_{11} & a_{12} & \cdots & a_{1n} \\\
a_{21} & a_{22} & \cdots & a_{2n} \\\
\vdots & \vdots & \vdots & \vdots \\\
a_{n1} & a_{n2} & \cdots & a_{nn} \\\
\end{matrix}
\right\)有a_{ij}=a_{ji}
$
对称矩阵百度百科
写法一(上三角形)
#include<iostream>
using namespace std;
const int N=110;
int a[N][N];
int main()
{
int n;
scanf("%d",&n);
int k=1;
while(n)
{
for(int i=1;i<=n;i++)
{
for(int j=i;j<=n;j++)//上三角形
{
if(i-1 != j-1) a[i-1][j-1]=a[j-1][i-1]=k;
else a[i-1][j-1]=k;
k++;
}
k=1;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
printf("%d ",a[i-1][j-1]);
}
printf("\n");
}
printf("\n");
scanf("%d",&n);
}
}
写法二(上三角形+下三角形)
#include<iostream>
using namespace std;
int main()
{
int n;
int k;
scanf("%d",&n);
while(n)
{
for(int i=1;i<=n;i++)
{
k=i;
for(int j=1;j<=i;j++)//下三角形
{
printf("%d ",k);
k--;
}
k=2;
for(int j=i+1;j<=n;j++)//上三角形
{
printf("%d ",k);
k++;
}
printf("\n");
}
printf("\n");
scanf("%d",&n);
}
}
写法三(下三角形)
#include<iostream>
using namespace std;
const int N=110;
int a[N][N];
int main()
{
int n;
scanf("%d",&n);
int k;
while(n)
{
for(int i=1;i<=n;i++)
{
k=i;
for(int j=1;j<=i;j++)//下三角形
{
if(i-1 != j-1) a[i-1][j-1]=a[j-1][i-1]=k;
else a[i-1][j-1]=k;
k--;
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
printf("%d ",a[i-1][j-1]);
}
printf("\n");
}
printf("\n");
scanf("%d",&n);
}
}
$\color{brown}{如果有任何问题可以评论指出,欢迎关注}$
写得真好,其实我一开始找规律的时候也是这么想的,但是不知道怎么实现
一个没看懂,大佬解答一下第一个方法的if(i-1 != j-1) a[i-1][j-1]=a[j-1][i-1]=k;
这个k上面不是1吗为什么赋1
第一种那个while为什么没有死循环呀
输入0的时候自己就跳出来了