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;
    }
  • 相关阅读:
    北京高考零分作文(看到最后一句笑喷了!)
    关于前几天无法访问的问题
    用 PHP 读取和编写 XML DOM[转]
    Delphi对INI文件的详细操作方法
    如何在WebService中获取客户端的IP地址
    正则表达式30分钟入门教程
    [原创]shell对xml操作的脚本
    预防SQL注入攻击之我见(好文章)
    表驱动方法(非常好的数据结构)
    请教shell读写XML问题
  • 原文地址:https://www.cnblogs.com/go-alltheway/p/13433922.html
Copyright © 2011-2022 走看看