话不多说,先看题
看了一些大佬的答案,人还是有点懵,于是自己想了个新办法
我们将数组斜过来看,前半部分的规律是很好找的,我们分奇偶输出就可以
主要是到了后半部分的规律不是很好找,但是我们可以将后半部分挪到前半部分,这样按照前半部分的输出方式就可以成功了。
图片是横着看一下,斜着一行行的箭头表示输出顺序。
上代码
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int n, a[105][105] = { 0 }, p;
cin >> n;
for (int i = 1;i <= n;i++) for (int j = 1;j <= n;j++) cin >> a[i][j];
for (int i = 1;i <= n;i++)
{
int temp = i;
if (i % 2 != 0)
{
int t = 1;
for (int j = 1;j <= i;j++) cout << a[temp--][t++] << " ";
}
if(i % 2 == 0)
{
if (i <= n)
{
int t = 1;
for (int j = 1;j <= i;j++) cout << a[t++][temp--] << " ";
}
}
}//对于前n行的输出========
int x = n - 1, x1 = 2;
for (int i = 1;i <= n - 1;i++)
{
int t = 1, t1 = n;
int p = x, p1 = x1;
for (int j = n - 1;j >= i;j--)
{
a[p--][t++] = a[t1--][p1++];
}
x--;x1++;
}//对数的位置的调换==========
int l = 1, b[105] = {0};
for (int i = n - 1;i >= 1;i--)
{
int temp = i;
if (i % 2 != 0)
{
int t = 1;
for (int j = 1;j <= i;j++) b[l++] = a[temp--][t++] ;
}
if (i % 2 == 0)
{
if (i <= n)
{
int t = 1;
for (int j = 1;j <= i;j++) b[l++] = a[t++][temp--];
}
}
}//这部分把前面复制粘贴一下就可以了,但是注意是反着循环的所以i从n - 1开始i--
int d = 0;
for (int i = 1;i < n;i++)
d += i;
for (int i = 1;i <= d;i++)
cout << b[i] << " ";
return 0;
}