C语言偶数魔方阵

article/2025/8/29 9:02:48

魔方阵还是一个比较有难度的C代码。魔方阵分为奇数魔方阵和偶数魔方阵,而偶数魔方阵中又分为能被4整除的偶数魔方阵和不能被4整除的偶数魔方阵。

下面是能被4整除的偶数 (4K) 魔方阵代码:

在写代码之前我们要先了解能被4整除的偶数魔方阵的规则

(1) 先将整个方阵划分成k*k个4阶方阵,然后在每个4阶方阵的对角线上做记号
(2) 由左而右、由上而下,遇到没有记号的位置才填数字,但不管是否填入数字,每移动一格数字都要加1
(3) 自右下角开始,由右而左、由下而上,遇到没有数字的位置就填入数字,但每移动一格数字都要加1

#include<stdio.h>
#include <assert.h>
//偶数魔方阵 4K(能被4整除)  //4 8 12 16
void Magic2()
{
#define ROW 8
#define COL ROWassert(ROW % 2 == 0 && ROW % 4 == 0);int arr[ROW][COL] = { 0 };int tmp = 1;for (int i = 0; i < ROW; i++){for (int j = 0; j < COL; j++){arr[i][j] = tmp++;}}int row1 = 0;//主对角线行int col1 = 0;//主对角线列int row2 = 0;//副对角线行int col2 = 0;//副对角线列//总体划分K*K块(i*j)for (int i = 0; i < (ROW / 4); i++)//i指向行{for (int j = 0; j < COL / 4; j++)//j指向列{row1 = 4 * i;col1 = 4 * j;row2 = 4 * i;col2 = 4 * j + 3;for (int k = 0; k < 4; k++){arr[row1][col1] = (ROW * COL + 1) - arr[row1][col1];arr[row2][col2] = (ROW * COL + 1) - arr[row2][col2];row1++;col1++;row2++;col2--;}}}for (int i = 0; i < ROW; i++){for (int j = 0; j < COL; j++){printf("%-3d", arr[i][j]);}printf("\n");}
#undef ROW
#undef COL
}
int main()
{Magic2();return 0;
}

调试结果如下:

下面是不能被4整除的偶数(4K+2)魔方阵代码 :

在写代码之前我们要先了解不能被4整除的偶数魔方阵的规则
1. 将其划分4个奇数魔方阵,左上角将1~ROW*COL/4,按照奇数魔方阵的规则放进去,接下来是右下,右上,左下,依次赋值
//上下标记的数字进行交换
标记的规则:1. 右半边大于k+2的列(从1开始)
2. 左半边,上下两个块最中心的点进行交换
3. 左半边小于中心列的列(除了上下半边最中心的行的第一列的那个值不用交换)(从1开始)

#include<stdio.h>
#include <assert.h>
void Magic3()
{
#define ROW 10
#define COL ROWassert(ROW % 2 == 0 && ROW % 4 != 0);int arr[ROW][COL] = { 0 };int currow = 0;int curcol = ROW / 4;arr[currow][curcol] = 1;//左上角for (int i = 2; i <= ROW * COL / 4; i++){if (arr[(currow - 1 + ROW / 2) % (ROW / 2)][(curcol + 1) % (COL / 2)] == 0){currow = (currow - 1 + ROW / 2) % (ROW / 2);curcol = (curcol + 1) % (COL / 2);}else{currow = (currow + 1) % (ROW / 2);}arr[currow][curcol] = i;}//右下角currow = ROW / 2;for (int i = 0; i < ROW / 2; i++, currow++){curcol = COL / 2;for (int j = 0; j < COL / 2; j++, curcol++){arr[currow][curcol] = arr[i][j] + (ROW * COL / 4);//curcol++;}//currow++;}//右上角currow = 0;for (int i = ROW / 2; i < ROW; i++, currow++){curcol = COL / 2;for (int j = COL / 2; j < COL; j++, curcol++){arr[currow][curcol] = arr[i][j] + (ROW * COL / 4);//curcol++;}//currow++;}//左下角currow = ROW / 2;for (int i = 0; i < ROW / 2; i++, currow++){curcol = 0;for (int j = COL / 2; j < COL; j++, curcol++){arr[currow][curcol] = arr[i][j] + (ROW * COL / 4);//curcol++;}//currow++;}//2.改标记点,先改右半边大于k+2的列   k=ROW/4   右半边的k=ROW/4+ROW/2   右半边的k+2 = ROW/4+ROW/2+2for (int j = ROW / 4 + ROW / 2 + 2; j < COL; j++)//j现在就指向大于k+2的那一列  如果j合法,则上下交换{for (int i = 0; i < ROW / 2; i++){int tmp = arr[i][j];arr[i][j] = arr[i + ROW / 2][j];arr[i + ROW / 2][j] = tmp;}}//3.左半边,上下两个块的中心点int tmp = arr[ROW / 4][COL / 4];arr[ROW / 4][COL / 4] = arr[ROW / 4 + ROW / 2][COL / 4];arr[ROW / 4 + ROW / 2][COL / 4] = tmp;//4.左半边小于k+1的列(除了上下半边最中心的行的第一列的那个值不用交换)(从1开始)for (int i = 0; i < ROW / 2; i++){for (int j = 0; j < ROW / 4; j++){if (i == ROW / 4 && j == 0){continue;}int tmp = arr[i][j];arr[i][j] = arr[i + ROW / 2][j];arr[i + ROW / 2][j] = tmp;}}for (int i = 0; i < ROW; i++){for (int j = 0; j < COL; j++){printf("%-3d", arr[i][j]);}printf("\n");}
#undef ROW
#undef COL
}
int main()
{Magic3();return 0;
}

调试结果如下:

 


http://chatgpt.dhexx.cn/article/yx5oAnK7.shtml

相关文章

魔方阵C++

魔方阵 概念 魔方阵&#xff0c;古代又称“纵横图”&#xff0c;是指组成元素为自然数1、2…n的平方的nn的方阵&#xff0c;其中每个元素值都不相等&#xff0c;且每行、每列以及主、副对角线上各n个元素之和都相等。阶数大于等于3。   如33的魔方阵&#xff1a;   8 1 6 …

C语言 魔方阵

文章目录 1.简介2.分类3.排列方法(1)奇数阶魔方阵(2)4M阶魔方阵(3)4M2阶魔方阵 4.代码表示(1)奇数魔方阵(2)4M阶魔方阵(3)4M2阶魔方阵 5.运行结果6完整代码(供调试) 1.简介 魔方阵&#xff0c;有时又称幻方或纵横图&#xff0c;由一组排放在正方形中的整数组成&#xff0c;其每…

输出魔方阵

输出“魔方阵”。所谓魔方阵是指这样的方阵&#xff0c;它的每一行、每一列和对角线之和均相等。例如&#xff0c;三阶魔方阵为 8 1 6 3 5 7 4 9 2 要求输出1~n^2的自然数构成的魔方阵。 魔方阵(环形数组)方法&#xff1a; 1.1方在第一行的中间 2.当前数字放在前一个数字的上一…

魔方阵的实现(三种情况)

魔方阵&#xff1a;把1到n*n排成n行n列方阵&#xff0c;使方阵中的每一行、每一列以及对角线上的数之和都相同&#xff0c;即为n阶魔方阵。 根据魔方阵的规律&#xff0c;我将它分为三种情况。 1.奇数阶魔方阵 规律&#xff1a;第一个数放在第一行的中间&#xff0c;下一个…

经典算法:魔方阵(奇数)

魔方阵的说明&#xff1a; 将1到n(为奇数)的数字排列在n*n的方阵上&#xff0c;且各行、各列与各对角线的和必须相同 此篇文章只讲如何编写奇数阶魔方阵 规律&#xff1a; ⑴ 将1放在第一行中间一列 ⑵ 从2开始直到nn止各数依次按下列规则存放&#xff1a; 每一个数存放的行…

魔方阵1~n*n(全)--C语言

魔方阵的构造 描述&#xff1a;由n*n个数字所组成的n阶方阵&#xff0c;若具有各对角线、各横列与纵行的数字和都相等的性质&#xff0c;则称为魔方阵。 这个相等的和称为魔术数字。若填入的数字是从1到n*n&#xff0c;称此种魔方阵为n阶正规魔方阵。 如下所示为一个3阶魔方阵…

《齿轮制作》

新建一个画板&#xff0c;然后托入俩条补助线&#xff0c;选中矩形工具画矩形再用直接选择工具选择选中矩形得点然后点击鼠标托动变形。 再复制一个图层按shiftt&#xff0c;把中心点托到补助线中心&#xff0c;再用鼠标移动一个角度&#xff0c; 再按住快捷键shiftctrlaltt。…

斜齿轮设计

目录 一、 前 言 二、 工艺规程设计说明 &#xff08;一&#xff09; 工艺规程制定的目的 &#xff08;二&#xff09; 工艺规程制定的原则 &#xff08;三&#xff09; 工艺规程制定的原始资料 &#xff08;四&#xff09; 工艺规程制定的步骤 1&#xff0e;确定生产…

齿轮和代码

背景 前几天在单元楼下&#xff0c;无意间捡到一个散板的小车&#xff0c;娃说是他的 回来后&#xff0c;好好教导了一番&#xff0c;不能高空抛物 今天&#xff0c;终于有时间坐下来修下 这种小车&#xff0c;往后拉一段距离再松手&#xff0c;就会往前一阵跑老远 在儿童玩…

tinkerCAD案例:11.制作齿轮

tinkerCAD案例&#xff1a;11.制作齿轮 制作齿轮 Add a cylinder to be the main part of the gear. 添加一个圆柱体作为齿轮的主要部分。 说明 Click and drag a cylinder onto the Workplane. 单击圆柱体并将其拖动到工作平面上。 Change the cylinder dimensions to 35mm …

齿轮动力学仿真

2K-H行星齿轮传动由于具有体积小、重量轻、速比大、效率高的特点,在民用、国防工业中都得到 了广泛的应用。近年来,国内外学者对行星齿轮传动的动态特性已经进行了大量研究[1&#xff5e; 6]。但其中绝大多数研究者在进行建模和分析时不考虑间隙的影响,采用线性振动理论研究系统…

SolidWorks齿轮设计软件工具 GearTrax介绍

SolidWorks齿轮设计软件工具 GearTrax介绍 GearTrax 是一款专业强大的齿轮设计软件工具&#xff0c;可以用于创建驱动器组件的实体模型&#xff0c;从而即可更好的帮助用户创建出具有真正渐开线齿廓的正齿轮、斜齿轮、锥齿轮、蜗轮、花键等所需要的齿轮设计。插件支持SolidWork…

齿轮建模 图片及链接

齿轮参数化建模 链接: https://pan.baidu.com/s/1n-MaweXPdjXC8aaunKggpg 提取码: pjwv 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦

opengl绘制齿轮

1. 概述 高级计算机三维建模第二次小实习&#xff0c;利用opengl在提供的基础代码上绘制完整的齿轮。绘制思路如下图&#xff1a; 2. 注意事项 对 p 0 , p 7 , p 6 , p 3 p_0,p_7,p_6,p_3 p0​,p7​,p6​,p3​这四点所组成的平面采取了三角形绘制的方式&#xff0c;绘制顺序…

c语言编程齿轮模数选择,如何画齿轮,一看就懂

马上注册&#xff0c;结交更多好友&#xff0c;享用更多功能&#xff01; 您需要 登录 才可以下载或查看&#xff0c;没有帐号&#xff1f;立即注册 x 在网上找到的&#xff0c;昨天看了一下&#xff0c;就画出来了 齿轮的画法 一、预备知识&#xff1a; 画一个M4&#xff0c;Z…

齿轮-机械原理基础

斜齿轮比直齿轮&#xff1a;传动能力强&#xff08;接触范围大&#xff09;&#xff0c;噪音小&#xff0c;转动平稳&#xff0c;制造成本相当&#xff0c;会产生轴向力。 1.斜齿圆柱齿轮在啮合时&#xff0c;啮合接触线是由短到长再到短&#xff1b;直齿轮是整体进入啮合整体…

用SW绘制渐开线直齿圆柱齿轮

用Solidworks绘制齿轮可以使用SW里面提供的标准库&#xff0c;经过笔者实测&#xff0c;发现并不是很好用&#xff1a;&#xff09;绘制齿轮大家可能仅仅是随手画一下&#xff0c;看着像齿轮就行了&#xff0c;但是如何正确规范的绘制一个渐开线圆柱齿轮&#xff0c;并能实现3D…