【问题标题】:Finalize the magic square generator完成幻方生成器
【发布时间】:2017-05-11 04:59:33
【问题描述】:

这段代码只对奇数 N 运行。问题是不知道如何添加对偶数 N 的支持

#include "stdafx.h"
#include <iostream>

using namespace std;

int main()
{
    setlocale(0, "");
    int n;
    cout << "Enter the size of the magic square - ";
    cin >> n;

    int **matrix = new int *[n];
    for (int i = 0; i < n; ++i)
    {
        matrix[i] = new int[n];
    }

    int nsqr = n * n;
    int i = 0, j = n / 2;

    for (int k = 1; k <= nsqr; ++k)
    {
        matrix[i][j] = k;
        i--;
        j++;
        if (k % n == 0)
        {
            i += 2;
            --j;
        }
        else
        {
            if (j == n)
            {
                j -= n;
            }
            else if (i < 0)
            {
                i += n;
            }
        }
    }

    cout << "\n\nMagic square size - " << n << "\n\n";
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            cout << matrix[i][j] << "\t";
        }
        cout << endl;
    }

    for (i = 0; i < n; i++)
        delete[] matrix[i];
    delete[] matrix;

    system("pause >> null");
    return 0;
}

我将不胜感激有关故障排除的提示。

如果我没记错的话,问题出在这一行:

int i = 0, j = n / 2;

但我不知道如何更改代码以支持偶数值

【问题讨论】:

标签: c++ algorithm generator


【解决方案1】:

我假设您的意思是 正常 幻方(其中数字限制为 1,2..n^2)

首先,在 n=2 的情况下构造这样的幻方是不可能的。

第二,你需要一个全新的算法,这要复杂得多。问题(为 any 偶数构造幻方)已解决in this paper,虽然那里没有任何伪代码,但从 explenation 中的实现非常简单(虽然很长)。

【讨论】:

    【解决方案2】:

    问题出在这里:

    i = 0;
    int j = n / 2;
    
    for (int k = 1; k <= nsqr; ++k)
    {
        matrix[i][j] = k;
        i--;
    }
    

    看看你如何在循环内递减 i 并将其作为数组的索引:

     matrix[-3][j] = k; // will be in your code
    

    你故意弄乱了数组的索引

    【讨论】:

      【解决方案3】:

      我在this artcile 找到了我的问题的答案 我根据这篇文章对我的算法进行了全面修改。稍后发布列出生成的程序

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-15
        • 1970-01-01
        • 2021-07-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多