牛客小白月赛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 <iostream>

using namespace std;

int main() {
    int n;
    cin >> n;
    int r=1,l=(n-1)*n+1;
    for(int i=0; i<n; i++) {
        for(int j=1; j<n; j++) {
            cout << r++ << " ";
        }
        cout << l++ << endl;
    }
    return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值