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;
    }
  • 相关阅读:
    Java.util.concurrent包学习(一) BlockingQueue接口
    [转载]最牛B的编码套路
    思考人生
    非奇异矩阵的零度互补法则
    Hopfield 网络(下)
    Hopfield 网络(上)
    矩阵的相似性与对角化
    左右特征向量
    特征多项式、代数重数与几何重数
    特征值和特征向量
  • 原文地址:https://www.cnblogs.com/go-alltheway/p/13433922.html
Copyright © 2011-2022 走看看