n阶魔方阵(奇数阵)的输出
需求
要求输出1~n²的自然数构成的魔方阵。
STEP 1 什么是魔方阵?
魔方阵,古代又称“纵横图”,是指组成元素为自然数1、2…n2的平方的n×n的方阵,其中每个元素值都不相等,且每行、每列以及主、副对角线上各n个元素之和都相等。
STEP 2 魔方阵的规律是什么?
此处先写简单一点的奇阶魔方阵,偶数阶的算法更复杂,暂不讨论。
奇阶魔方阵的排列方法:
⑴将1放在第一行中间一列;
⑵从2开始直到n×n止各数依次按下列规则存放;每一个数存放的行比前一个数的行数减1,列数加1;
⑶如果上一个数的行数为1,则下一个数的行数为n(指最下一行);
⑷当上一个数的列数为n时,下一个数的列数应为1,行数减去1;
⑸如果按上面规则确定的位置上已有数,或上一个数是第一行第n列时,则把下一个数放在上一个数的下面。
STEP 3 编程思路
⑴构造一个n阶魔方阵雏形,即n*n的动态二维数组;
⑵编写函数实现魔方阵的排列算法;
⑶调用函数输出魔方阵。
STEP 4 要点整理
malloc函数:分配内存空间给动态数组(使用后需在函数最后用free语句释放所占用的内存)
memset函数:给数组的所有元素赋初值
-----------------------------------------华丽丽的分割线---------------------------------代码君要出场了-----------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h> void f(int x); int main()
{
int x; scanf("%d", &x);
f(x); return ;
} void f(int x)
{
int i, m, n;
int **mf; mf = (int **)malloc(sizeof(int *) * x); //定义动态二维数组mf for(i = ; i < x; i++)
{
mf[i] = (int *)malloc(sizeof(int) * x);
memset(mf[i], , sizeof(int) * x); //初始化,将二维数组mf所有元素赋值为0
} m = ;
n = x / ;
mf[m][n] = ; for(i = ; i <= x * x; i++)
{
m--;
n++; if(m < ) //如果是在第一行,行数变为最后一行,列数加1
{
m = x - ;
} if(n > x - ) //如果是在最后一列,行数减1,列数为第1行
{
n = ;
} if(mf[m][n] != ) //如果后续的数所处位置已有数,则行数加1,列数不变
m++; mf[m][n] = i;
} for(m = ; m < x; m++)
{
for(n = ; n < x; n++)
{
printf("%5d", mf[m][n]);
} printf("\n");
} for(i = ; i < x; i++) //释放占用的内存
{
free(mf[i]);
mf[i] = ;
} free(mf);
mf = ;
}
欢迎转载,请备注原始连接http://www.cnblogs.com/liuliuliu/p/3753952.html,并注明转载。
作者bibibi_liuliu,联系方式395985239@qq.com
n阶魔方阵(奇数阵)的输出的更多相关文章
- 任意阶魔方阵(幻方)的算法及C语言实现
		写于2012.10: 本来这是谭浩强那本<C程序设计(第四版)>的一道课后习题,刚开始做得时候去网上找最优的算法,结果发现奇数和双偶数(4的倍数)的情况下算法都比较简单,但是单偶数(2的倍 ... 
- 【C++小白成长撸】--N阶幻方(魔阵)矩阵
		解决方法:1.第一个元素放在第一行中间一列 2.下一个元素存放在当前元素的上一行.下一列. 3.如果上一行.下一列已经有内容,则下一个元素的存放位置为当前列的下一行. 在找上一行.下一行或者下一列的时 ... 
- HDU 1998 奇数阶魔方【模拟填数/注意边界和细节】
		奇数阶魔方 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ... 
- 算法:九宫格问题--奇数阶魔方(Magic-Square)
		一.魔方介绍 魔方(这里是简称,也可以叫幻方.魔术矩阵,Magic Square)是 n×n 正方形网格(n 为每侧的单元数),里面每个单元格填充了不同的正整数 1, 2, 3, ... , n2,并 ... 
- 【C++小白成长撸】--(续)单偶数N阶魔方矩阵
		1 /*程序的版权和版本声明部分: **Copyright(c) 2016,电子科技大学本科生 **All rights reserved. **文件名:单偶数N阶魔方矩阵 **程序作用:单偶数N阶魔 ... 
- JavaScript语言里判断一个整数是偶数还是奇数,并输出判断结果
		<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ... 
- python练习:编写一个程序,要求用户输入10个整数,然后输出其中最大的奇数,如果用户没有输入奇数,则输出一个消息进行说明。
		python练习:编写一个程序,要求用户输入10个整数,然后输出其中最大的奇数,如果用户没有输入奇数,则输出一个消息进行说明. 重难点:通过input函数输入的行消息为字符串格式,必须转换为整型,否则 ... 
- python练习:编写一个程序,检查3个变量x,y,z,输出其中最大的奇数。如果其中没有奇数,就输出一个消息进行说明。
		python练习:编写一个程序,检查3个变量x,y,z,输出其中最大的奇数.如果其中没有奇数,就输出一个消息进行说明. 笔者是只使用条件语句实行的.(if-else) 重难点:先把三个数进行由小到大的 ... 
- 杭电ACM 1998奇数阶魔方
		#include<stdio.h>#include <string.h>int main(){ int n,m; int a[40][40]={0}; scanf(" ... 
随机推荐
- zookeeper和淘宝dubbo的关系
			Dubbo建议使用Zookeeper作为服务的注册中心. 1. Zookeeper的作用: zookeeper用来注册服务和进行负载均衡,哪一个服务由哪一个机器来提供必需让调用者知 ... 
- CSS 图片
			CSS 图片 一.圆角图片 img { border-radius: 8px; } 二.缩略图 border 属性来创建缩略图. img { border: 1px solid #ddd; borde ... 
- 如何用纯 CSS 创作一只徘徊的果冻怪兽
			效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/VdOKQG 可交互视频 ... 
- feather mac 问题小结
			feater 依赖php及jdk 1.自带的php没有cgi ,索性直接装个新的 修改环境变量,并使其生效,验证方式是 打印版本信息: php -v PHP 7.1.13 (cli) (built: ... 
- [Linux 002]——Linux的常用命令
			经过前面的学习,大概了解了计算机组成原理和操作系统的一些知识.尽管这些知识都是琐碎的,拼凑的,在以后的工作和学习中仍需进行深入的了解.但是这些预备知识对于准备跨入 Linux 大门的童鞋来说,应该是足 ... 
- 20145314郑凯杰《信息安全系统设计基础》第6周学习总结 part A
			第4章 处理器体系结构 part 1 本部分对改章节的知识点进行总结: 一个处理器支持的指令和指令的字节级编码称为它的指令集体系结构(ISA). 不同的出路器有不同的ISA. ISA模型看上去应该是顺 ... 
- linux 用户态和内核态以及进程上下文、中断上下文 内核空间用户空间理解
			1.特权级 Intel x86架构的cpu一共有0-4四个特权级,0级最高,3级最低,ARM架构也有不同的特权级,硬件上在执行每条指令时都会对指令所具有的特权级做相应的检查.硬件已经提 ... 
- GCC精彩之旅
			在为Linux开发应用程序时,绝大多数情况下使用的都是C语言,因此几乎每一位Linux程序员面临的首要问题都是如何灵活运用C编译器.目前Linux下最常用的C语言编译器是GCC(GNU Compile ... 
- Eye Protection FAQ
			Q: Why does smart protection not work? A: Please make sure the checkbox "Eye Protection" i ... 
- ElasticSearch集群故障案例分析: 警惕通配符查询
			最近ElasticSearch集群出现了 https://elasticsearch.cn/article/171 文章中描述的情况,现在转载全文警示下自己. 许多有RDBMS/SQL背景的开发者,在 ... 
