牛客小白月赛2 A-数字方阵

牛客小白月赛2 A-数字方阵

链接:[https://www.nowcoder.com/acm/contest/86/A](https://www.nowcoder.com/acm/contest/86/A)

来源:牛客网

题目描述

Etéreo总是对数字的神秘感感到好奇。这次,他在纸上写下了 n2 n 2 个从1到 n2 n 2 的数字,并把这些数字排成了n*n的方阵。他惊奇地发现,这个方阵中每行、每列和两条主对角线上的数字之和都不一样。他想要更多的方阵,但他再写不出来了。于是他㕛跑来找你,请你给他一个边长为n的满足上述性质的方阵。

输入描述:

输入共一行,一个整数n,意义同题面描述。

输出描述:

输出共n行,每行n个整数,表示答案方阵。

输出任意一种可行方案即可。

示例1

输入

3

输出

1 2 3
8 9 4
7 6 5

备注:

3 <= n <= 1000

思路

在别人的提交中看到了一种非常优雅的解法。至于作者是怎么想出来的,我也不太清楚。忍不住记下来膜拜一下。

题中有提到:输出任意一种可行方案即可。证明正确的答案不止一个,让我好奇它的判定。一般而言,方阵中的元素都是确定(1到n*n),然后每行每列的数字之和加起来也是确定值,必然是两倍的方阵元素之和。

最后考虑对角线上的元素。emmmm。。。总之,题解牛逼!

AC代码

#include 

using namespace std;

int main() {
    int n;
    cin >> n;
    int r=1,l=(n-1)*n+1;
    for(int i=0; i

你可能感兴趣的:(AC类)