判断魔方阵c语言程序设计_C语言实现魔方阵代码及解析
原标题:C语言实现魔方阵代码及解析
问题描述
编写程序,实现如下表所示的5-魔方阵。
17
24
1
8
15
23
5
7
14
16
4
6
13
20
22
10
12
19
21
3
11
18
25
2
9
5-魔方阵
问题分析
所谓“n-魔方阵”,指的是使用1〜n2共n2个自然数排列成一个n×n的方阵,其中n为奇数;该方阵的每行、每列及对角线元素之和都相等,并为一个只与n有关的常数,该常数为n×(n2+1)/2。
例如4-魔方阵,其第一行、第一列及主对角线上各元素之和如下:
第一行元素之和:17+24+1+8+15=65
第一列元素之和:17+23+4+10+11=65
主对角线上元素之和:17+5+13+21+9=65
而 n×(n2+1)/2=5×(52+1)/2=65 可以验证,5-魔方阵中其余各行、各列及副对角线上的元素之和也都为65。
假定阵列的行列下标都从0开始,则魔方阵的生成方法为:在第0行中间置1,对从2开始的其余n2-1个数依次按下列规则存放:
(1) 假定当前数的下标为(i,j),则下一个数的放置位置为当前位置的右上方,即下标为(i-1,j+1)的位置。
(2) 如果当前数在第0行,即i-1小于0,则将下一个数放在最后一行的下一列上,即下标为(n-1,j+1)的位置。
(3) 如果当前数在最后一列上,即j+1大于n-1,则将下一个数放在上一行的第一列上,即下标为(i-1,0)的位置。
(4) 如果当前数是n的倍数,则将下一个数直接放在当前位置的正下方,即下标为(i+1,j)的位置。
算法设计
在设计算法时釆用了下面一些方法:
定义array()函数,array()函数的根据输入的n值,生成并显示一个魔方阵,当发现n不是奇数时,就加1使之成为奇数。
使用动态内存分配与释放函数malloc()与free(),在程序执行过程中动态分配与释放内存,这样做的好处是使代码具有通用性,同时提高内存的使用率。
在分配内存时还要注意,由于一个整型数要占用两个内存,因此,如果魔方阵中要存放的数有max个,则分配内存时要分配2*max个单元,从而有malloc(max+max)。在malloc()函数中使用max+max而不是2*max是考虑了程序运行的性能。显然应该使用二维数组来表示魔方阵,但虽然数组是二维形式的,而由于内存是一维线性的,因此在存取数组元素时,要将双下标转换为单个索引编号。在程序中直接定义了指针变量来指向数组空间,即使用malloc()函数分配的内存。
下面是完整的代码:
#include
#include
int array(int n)
{
int i, j, no, num, max;
int *mtrx;
if(n%2 == 0) /*n是偶数,则加1使其变为奇数*/
{
n=n+1;
}
max=n*n;
mtrx=(int *)malloc(max+max); /*为魔方阵分配内存*/
mtrx[n/2]=1; /* 将1存入数组*/
i=0; /*自然数1所在行*/
j=n/2; /*自然数1所在列*/
/*从2开始确定每个数的存放位置*/
for(num=2; num<=max; num++)
{
i=i-1;
j=j+1;
if((num-1)%n == 0) /*当前数是n的倍数*/
{
i=i+2;
j=j-1;
}
if(i<0) /*当前数在第0行*/
{
i=n-1;
}
if(j>n-1) /*当前数在最后一列,即n-1列*/
{
j=0;
}
no=i*n+j; /*找到当前数在数组中的存放位置*/
mtrx[no]=num;
}
/*打印生成的魔方阵*/
printf("生成的%d-魔方阵为:",n);
no=0;
for(i=0; i
{
printf("n");
for(j=0; j
{
printf("%3d", mtrx[no]);
no++;
}
}
printf("n");
free(mtrx);
return 0;
}
int main()
{
int n;
printf("请输入n值:n");
scanf("%d", &n);
array(n); /*调用array函数*/
return 0;
}
运行结果:
linuxidc@linuxidc:~$ ./linuxidc
请输入n值:
5
生成的5-魔方阵为:
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
知识点补充
在解决该问题时,采用的是动态分配内存的方式,并使用了指针变量mtrx来指向二维数组中的元素。在算法设计中,要存储魔方阵需要一个二维数组,因此再给出直接使用二维数组来生成8-魔方阵的程序。
直接使用二维数组生成5-魔方阵的代码如下:
#include
#define N 8
int main()
{
int a[N][N]={0}, i, j, k, t, x, y;
i=0; /*自然数1的行标*/
j=N/2; /*自然数1的列标*/
t=N-1; /*最后一行、最后一列的下标*/
for(k=1; k<=N*N; k++)
{
a[i][j]=k;
x=i;
y=j;
if(i == 0)
i=t;
else
i=i-1;
if(j != t)
j=j+1;
else
j=0;
if(a[i][j]!=0)
{
i=x+1;
j=y;
}
}
printf("linuxidc.com生成的8-魔方阵为:");
for(i=0; i
{
printf("n");
for(j=0; j
{
printf("%3d", a[i][j]);
}
}
printf("n");
return 0;
}
示例输出如下:
linuxidc.com生成的8-魔方阵为:
41 43 53 63 1 11 21 31
42 52 62 8 10 20 30 40
51 61 7 9 19 29 39 49
60 6 16 18 28 38 48 50
5 15 17 27 37 47 57 59
14 24 26 36 46 56 58 4
23 25 35 45 55 0 3 13
32 34 44 54 64 2 12 22
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx
本文永久更新链接地址:https://www.linuxidc.com/Linux/2018-10/155082.htm返回搜狐,查看更多
责任编辑:
判断魔方阵c语言程序设计_C语言实现魔方阵代码及解析相关推荐
- C语言实现魔方阵代码及解析
问题描述 编写程序,实现如下表所示的5-魔方阵. 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 5-魔方阵 问题分 ...
- 判断魔方阵c语言程序设计_C语言编程,输出魔方阵
展开全部 下面运行通过,只e68a8462616964757a686964616f31333238656539不过不知道是否符合你的格式,代码如下: #include void main() { in ...
- 图书管理系统C语言程序设计课程,vs c语言图书管理平台课程设计_图书管理平台c语言程序设计_c语言课程设计 图书管理系统...
#include #include #include #include //#include #define MAX 100 struct Student { int num;/*书代号*/ char ...
- 006-高级语言程序设计C 第六章,高级语言程序设计_C语言(第六章 数组.ppt
<高级语言程序设计_C语言(第六章 数组.ppt>由会员分享,可在线阅读,更多相关<高级语言程序设计_C语言(第六章 数组.ppt(30页珍藏版)>请在人人文库网上搜索. 1. ...
- 《Python语言程序设计》之第三次平时作业解析
<Python语言程序设计>之第三次平时作业解析 程序填空题 单项选择题 程序填空题 下面程序的功能是从列表中筛选出字符串元素,并将它们连接为一个字符串.程序运行后的输出情况如下图所示.请 ...
- c c 语言程序设计同步,第一部分C语言程序设计C语言程序设计同步练习答案.PDF...
第一部分C语言程序设计 C语言程序设计同步练习答案 第1章 绪论 一.单选题 1-5 DBCAC 二.判断题 1. 错 2. 错 第2章 C语言基本数据类型.运算符和表达式 一.单选题 1-5 ADA ...
- c语言指针部分上机,北科大C语言程序设计实验报告8-指针-练习题代码(2次上机课内容)--...
北科大C语言程序设计实验报告8-指针-练习题代码(2次上机课内容)-- 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文 ...
- 无人机c语言程序设计,c语言程序设计课程设计单元设计教案).pdf
<C语言程序设计> 课程整体教学设计 (2019-2020学年第1 学期) 课程名称: C 语言程序设计 所属系部: 机电与汽车工程学院 制定人: 张三 合作人: 制定时间: 2019.9 ...
- c语言交通违章编程代码,C语言程序设计交通处罚单管理系统 报告(内含代码).doc...
C语言程序设计交通处罚单管理系统 报告(内含代码) C语言程序设计 姓名:张强强 学号:座机电话号码695 班序号:011121 前言: C语言是近年来国内得到迅速推广使用的一种计算机语言.C语言程序 ...
最新文章
- 德扑 AI 之父解答 Libratus 的13个疑问:没有用到任何深度学习,DL 远非 AI 的全部
- linux 系统 RRDTool安装方法
- python培训班排行榜-深圳python培训机构排行榜
- linux 进程间通信 dbus-glib【实例】详解一(附代码)(d-feet工具使用)
- 数据库系统(四)——触发器
- web前端CSS2学习2017.6.22
- python中的dict是什么数据类型_Python数据类型之字典(dict)
- python的匿名函数返回值_Python匿名函数返回值输出问题望指点
- Datasheet,你会读么?[转]
- TIOBE 6 月编程语言排行榜:Java 放缓,C 复兴了!
- 集群tomcat+session共享
- 转:前端js、jQuery实现日期格式化、字符串格式化
- JavaWeb——Servlet(入门必备,web请求与响应的底层)
- 参考官方mysql自定义一个mysql sink connector
- windows/linux 下iozone参数详解
- 2021-10-26 模电共射放大电路部分
- 2011QQ搞笑个性签名:小弟不才,大名耶稣.小名上帝.法号如来
- C/C++牛客网刷题练习之翻转链表篇
- 【C语言程序设计】C语言三色旗问题!
- 数据库-mysql的配置