魔方数组的C 语言实现以及算法

编程入门 行业动态 更新时间:2024-10-24 02:29:26

<a href=https://www.elefans.com/category/jswz/34/1760048.html style=魔方数组的C 语言实现以及算法"/>

魔方数组的C 语言实现以及算法

最近复习完C语言,想做点可以锻炼自己的小项目,于是发现了一本叫《C语言程序设计实例精粹》的书,感觉很适合我,于是就
打了几个感觉比较好玩的程序吧,也是锻炼自己读代码和写代码的能力,我也会不定期的更新一些适合新手练习的程序以及算法,
程序上边有比较详细的注释和讲解,有共同爱好的可以交流一下。

这个程序为设计魔方数组的一段程序,也是设计魔方数组的一种算法,其实我感觉这本书上的这种算法不好用,比较复杂,
而且书上也有很多小错误例如 malloc的返回值是void型的 而明mtrx是整型的,不能画等号,要(int*malloc)才行。

//① 在第一行中间放1;
//② 假定当前元素的下标为(i,j),则对其余的2~n方个数,基本的放置位置为当前位置的右上方,即下标为(i-1,j+1);
//   与此同时,若当前的数是n的倍数,则放在当前位置的正下方;
//   即下标为(i+1,j);若i-1小于1,则将这个数放在本列最下端;
//   若j+1大于n,则将这个数放在本行最左端。
#include<stdio.h>
#include<malloc.h>//动态存储分配函数头文件,当对内存区进行操作时,调用相关函数.
void main()
{int array(int n);int n;printf("Enter the number,please:\n");scanf_s("%d", &n);array(n);getchar();getchar();
}int array(int n)
{int i, j, no, num, max;int *mtrx;//指向存放魔方矩阵一维数组if (n % 2 == 1){n = n + 1;}max = n*n;//开始构建魔方矩阵mtrx = (int*)malloc(max*max);mtrx[max / 2] = 1;//第一个数i = 0;j = n / 2;for (num = 2; num <= max; num++){i = i - 1;j = j + 1;if ((num - 1) % n == 0)//由于上边已经执行一次循环,所以要num-1,i,j位置随上次循环的变动,判断是不是特殊情况。{i = i + 2;j = j - 1;}if (i < 0)//i上边已经减过一次,所以不用再减{i = n - 1;}if (j > n - 1){j = 0;}no = i*n + j;mtrx[no] = num;//对一位数组进行赋值}printf("The magic matrix is:");//对mtrx进行输出no = 0;for (i = 0; i < n;i++){printf("\n");for (j = 0; j < n; j++){printf("%3d", mtrx[no]);no++;}}free(mtrx);return *mtrx;
}

更多推荐

魔方数组的C 语言实现以及算法

本文发布于:2024-03-15 07:27:37,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1738388.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:魔方   数组   算法   语言

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!