最终确定魔术方形生成器
Finalize the magic square generator
此仅针对奇数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 << "nnMagic square size - " << n << "nn";
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;
,但我不知道如何更改代码以支持偶数
我会假设您的意思是 normal 魔术方形(其中数字仅限于1,2..n^2)
首先,为n = 2构建这样的魔法正方形是不大的。
第二,您将需要一种全新的算法,这要复杂得多。本文解决了问题(为构建魔术平方>偶数偶数),尽管那里没有任何PSAUDO代码,但解释中的实现非常简单(虽然很长)。
问题在这里:
i = 0;
int j = n / 2;
for (int k = 1; k <= nsqr; ++k)
{
matrix[i][j] = k;
i--;
}
看看您如何在循环内部减小我,并将其作为数组的索引,因此:
matrix[-3][j] = k; // will be in your code
您故意用数组的索引搞乱
我在这个artcile中找到了我的问题的答案我根据本文进行了完整的修订算法。后来发布的列出了结果程序
相关文章:
- 程序仅正确旋转方形图像
- 特征 3 方形数组除以列数组
- 将图像魔术转换命令转换为魔术++c++代码
- 对使用 CMake 生成为 lib .a 的方法的未定义引用
- 将图像魔术 blob 保存到节点缓冲区
- 如何生成数组来测试quickSort的最佳情况
- Qt C++ 创建方形音频音调波.播放并保存它
- 在C++上创建魔术包
- 圆形与方形碰撞检测以及需要响应C++ |OpenGL。我的问题就是这个"I need to keep the circle outside the square"
- C++或宏魔术来生成方法和转发参数
- 这是如何运作的?(C 名称查找魔术)
- 评估 NxN 矩阵中最大正方形的面积,该矩阵最多包含 K 个(随机放置)
- 如何在C++中避免魔术字符串和魔术数字
- Doxygen不会为独立函数生成文档
- 2尺寸阵列魔术广场
- 魔术广场错误的位置
- 实现随机生成数组的算法
- 带有矢量切片的矢量指针,用于从预序和顺序向量生成树
- 最终确定魔术方形生成器
- C 读取魔术方形检查器的Console Row中的输入