题目大意
请构造一个长宽为 n 的矩阵,要求矩阵内所有的数字是 [1,n*n] 的排列,且要求矩阵内每两个相邻数之间的绝对值之差的种类数量最多,输出该矩阵。
大体思路
这道题出奇的便捷思路跟a题make it beautiful相似,可以一小一大,让他的差从大到小开始出现,然后蛇形矩阵把他输出,当时竟然没有想到,后来看大佬们的思路才被点醒
果然思路这个东西,就是题目的出现和突发奇想还有做题经验获得的
代码如下
#include <bits/stdc++.h>
using namespace std;
void solve()
{
int n;
int ans[666][666];
cin >> n;
int l = 1, r = n * n;
int cnt = 0;
for (int i = 1; i <= n; i++ )
//i&1 判断奇数偶数
{
if ((i & 1)) //i&1 !=0 为奇数
{
for (int j = 1; j <= n; j++ , cnt++ )
{
if (cnt & 1) ans[i][j] = r--;
else ans[i][j] = l++;
}
}
else
{
for (int j = n; j >= 1; j--, cnt++ )
{
if (cnt & 1) ans[i][j] = r--;
else ans[i][j] = l++;
}
}
}
for (int i = 1; i <= n; i++ )
for (int j = 1; j <= n; j++ )
{
cout << ans[i][j] << " ";
if(j==n) cout << endl;
}
}
int main()
{
int n;
cin >> n;
while(n--) solve();
return 0;
}