第3章 编程问题 3.3节 9
来源:互联网 发布:程序员对笔记本尺寸 编辑:程序博客网 时间:2024/06/08 18:06
题目描述:一个魔法正方形是一个
下面是对一个任意的奇数n创建一个
如果在第j列中向上移动一行造成超出了顶行,那么移动到第j列的底部并在那里放置k+1。
如果在第i行的一次移动中使得超出了正方形的右边,放置k+1到正方形的左边。
- 如果这次移动到了一个被占用了的方块或者使你移出了正方形的右上角,在k的正下方放置k+1。
编写一个程序为一个任意的奇数n创建一个n×n 的魔法正方形。
C++实现:
#include <iostream>using namespace std;void magicSquare(unsigned **square, unsigned n);void main() { unsigned n = 0; cout << "输入一个任意奇数:"; cin >> n; /*动态申请二维数组*/ unsigned **square = new unsigned*[n];//开辟行 for (int i = 0; i < n; i++) { square[i] = new unsigned[n]; //开辟列 } /*申请二维数组结束*/ /*初始化数组*/ for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { square[i][j] = 0; } } /*数组初始化结束*/ magicSquare(square, n); /*输出数组元素*/ for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cout << square[i][j] << "\t"; if (j == n - 1) { cout << endl; } } } /*输出结束*/ /*释放内存*/ delete[] square; square = NULL; system("pause");}/*----------------------------------------unsigned **square:二维数组的首地址unsigned n:正方形的边长----------------------------------------*/void magicSquare(unsigned **square, unsigned n) { int k = 1; //被放置在正方形中的数 int row = 0, colum = n / 2;//第一个数“1”被放置的位置 square[row][colum] = k; k++; while (k <= n * n) { int temp_r = row, temp_c = colum;//临时变量存储当前元素位置 row--; colum++; if (row < 0 && colum >= 0) {/*如果在第j列中向上移动一行造成超出了顶行,那么移动到第j列的底部*/ row = n - 1; } else if (row >= 0 && colum == n) {/*如果在第i行的一次移动中使得超出了正方形的右边,放置k+1到正方形的左边。*/ colum = 0; } else if (row < 0 && colum == n) {/*如果这次移动使你移出了正方形的右上角,在k的正下方放置k+1。*/ row = temp_r; colum = temp_c; row++; } if (square[row][colum] == 0) { square[row][colum] = k; } else {/*如果这次移动到了一个被占用了的方块,在k的正下方放置k+1。*/ /*还原row和colum*/ row = temp_r; colum = temp_c; row++; square[row][colum] = k; } k++; }}
阅读全文
0 0
- 第3章 编程问题 3.3节 9
- 第3章 编程问题 3.2节 3
- 第2章 编程问题 2.2节 3
- 第3章 编程问题 3.2节 1
- 第3章 编程问题 3.2节 2
- 第3章 编程问题 3.2节 4
- 第2章 编程问题 2.2节 1
- 编程珠玑--第12章 取样问题
- 《编程珠玑》第12章:取样问题
- 编程珠玑第9章
- 第 9 章 编程实践
- 数据库编程第3章
- 第3章:RDD编程
- 第3章 IAR编程
- 【C++语言99个常见编程错误】第9章 继承谱系设计问题
- 【C++语言99个常见编程错误】第3章 预处理器问题
- 编程珠玑第12章(取样问题)学习笔记
- 《集体智慧编程》第5章一些问题
- mybatis trim标签用法
- lintcode(184)最大数
- 刷清橙OJ--A1034.孪生素数对
- 事务基础详解
- Ajax的错误调试
- 第3章 编程问题 3.3节 9
- Android之SharedPreferences详解
- 双卡时候获取指定的imsi码
- [一天几个linux命令] cd
- 交叉编译安装ARM平台上的Qt
- 【前端技巧】html右键禁用和web页面中添加加入qq群的方式
- Java环境搭建一JDK安装下载配置
- Python的7种性能测试工具:timeit、profile、cProfile、line_profiler、memory_profiler、PyCharm图形化性能测试工具、objgraph
- C#在异常中获取HttpStatusCode用法