zoukankan      html  css  js  c++  java
  • 神奇的幻方

    题目描述

    幻方是一种很神奇的 N∗N矩阵:它由数字 1,2,3,⋯⋯ ,N×N 构成,且每行、每列及两条对角线上的数字之和都相同。

    N 为奇数时,我们可以通过下方法构建一个幻方:

    首先将 1写在第一行的中间。

    之后,按如下方式从小到大依次填写每个数 K(K=2,3,⋯ ,N×N)

    1. (K−1)在第一行但不在最后一列,则将 K 填在最后一行(K1) 所在列的右一列;
    2. (K1) 在最后一列但不在第一行,则将 K 填在第一列, (K1) 所在行的上一行;
    3. (K−1) 在第一行最后一列,则将 K填在 (K1) 的正下方;
    4. (K−1) 既不在第一行,也不在最后一列,如果 (K1) 的右上方还未填数,则将 K 填在 (K1) 的右上方,否则将 K 填在 (K1) 的正下方。

    现给定 N,请按上述方法构造 N×N的幻方。

    输入格式

    一个正整数 N ,即幻方的大小。

    输出格式

    N 行 ,每行 N 个整数,即按上述方法构造出的 N×N 的幻方,相邻两个整数之间用单空格隔开。

    输入输出样例

    输入 #1
    3
    
    输出 #1
    8 1 6
    3 5 7
    4 9 2

    代码如下

    #include<iostream>
    using namespace std;

    int cube[40][40];
    int main()
    {
        int N;
        int i,j;
        int k = 1;
        
        cin >> N;
        i = 1;
        j = N/2 + 1;
        
        while(k <= N*N)
        {
            cube[i][j] = k;
            if(k % N == 0)
                ++i;
            else
            {
                --i;
                ++j;
            }
            if(i == 0)
                i = N;
                
            if(j == N+1)
                j = 1;
                
            k++;
        }
        
        for(int i = 1; i <= N; i++)
        {
            for(int j = 1; j <= N; j++)
                cout << cube[i][j] << " ";
            cout << endl;
        }
        return 0;
    }
  • 相关阅读:
    Vijos P1459 车展 (treap 任意区间中位数)
    「BZOJ1691」[Usaco2007 Dec] 挑剔的美食家 (Treap)
    hdu 1540 Tunnel Warfare(Treap)
    hdu 2844 Coins (多重背包+二进制优化)
    hdu 2159 FATE (二维完全背包)
    hdu 2955 Robberies (01背包)
    hdu 2546 饭卡 (01背包)
    hdu 2191 (多重背包二进制优化)
    2019西北工业大学程序设计创新实践基地春季选拔赛 I Chino with Rewrite (并查集+树链剖分+线段树)
    CF895E Eyes Closed (期望)
  • 原文地址:https://www.cnblogs.com/go-alltheway/p/13433922.html
Copyright © 2011-2022 走看看