C语言经典矩阵算法之打印魔方阵(详解)

2023-05-16

文章目录

    • 一、矩阵算法
    • 二、打印魔方阵

一、矩阵算法

1、矩阵
矩阵,是线性代数中的基本概念之一。一个m×n的矩阵就是m×n个数排成m行n列的一个数阵。由于它把许多数据紧凑的集中到了一起,所以有时候可以简便地表示一些复杂的模型。矩阵乘法看起来很奇怪,但实际上非常有用,应用也十分广泛。

2、矩阵算法
矩阵算法是一种高效的算法,可以把一些一维递推优化到log( n ),还可以求路径方案等,所以更是是一种应用性极强的算法。

3、矩阵算法的实现
矩阵算法通常需要使用二维数组来实现,矩阵算法往往需要交换或者存取矩阵中的某个元素,这就需要我们灵活掌握二维数组两个下标的变换。

二、打印魔方阵

1、魔方阵
魔方阵,古代又称“纵横图”,是指组成元素为自然数1、2、…、n的平方的n×n的方阵,
其中每个元素值都不相等,且每行、每列以及主、副对角线上各n个元素之和都相等。

2、C语言实现

#include <stdio.h>
#define N 20
void Matrix(); 


void main()
{	
	Matrix();
}

//打印n阶魔方阵的函数 
void Matrix()
{
	int a[N][N], n, i, j, k;
	while(1)
	{
		printf("请输入魔方阵的阶数(n<=20,且是奇数):");
		scanf("%d", &n);
		if(n!=0 && n<=20 && n%2!=0)
		{
			printf("%d阶魔方矩阵.\n", n);
			break;
		}
	}
	//初始化二维数组
	for(i=0; i<n; i++)
		for(j=0; j<n; j++)
			a[i][j]= 0;
			
	//构造魔方阵
	i= 0;
	j= n/2;
	a[i][j]= 1;  //放在第一行的中间一列 
	k= 2;
	while(k<=n*n)
	{
		i= i-1;  //行号减1 
		j= j+1;  //列号加1 
		if(i<0 && j>n-1)  //如果上一个数位与第1行第n列,当前的数应在上一个数的下面 
		{
			i= i+2;
			j= j-1;
		}
		else 
		{
			//如果上一个数位与第1行,则当前的数应位与最后一行 
			if(i<0)
				i= n-1;
			//如果上一个数位与第n列,则当前的数应位与第1列 
			if(j>n-1)
				j= 0;
		}
		if(a[i][j]==0)  //当前的数保存到数组中 
			a[i][j]= k;
		else  //如果已经有数存在你,则放在上一个数的下面
		{
			i= i+2;
			j= j-1;
			a[i][j]= k;
		} 
		k++;  //k增加1,准备存放下一个数 
	}
	
	//输出魔方阵
	for(i=0; i<n; i++)
	{
		for(j=0; j<n; j++)
			printf("%4d", a[i][j]);
		printf("\n");
	} 
}

01
02

参考文献:《The Function and Algorithm of Program Language C/C++》

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言经典矩阵算法之打印魔方阵(详解) 的相关文章

随机推荐

  • 深入理解C语言系列之函数传参的那些事儿(函数参数、指针、地址、数组)

    文章目录 一 指针与函数之间的关系二 复制传参三 地址传参四 传一维数组 xff08 地址 xff09 五 传二维数组 xff08 地址 xff09 六 传指针数组 xff08 地址 xff09 七 指针函数和函数指针 一 指针与函数之间的
  • ARM处理器基本指令大全

    目录 一 ARM的7种运行模式和2种工作状态 二 ARM支持的异常类型 三 ARM基本指令及功能描述 一 ARM的7种运行模式和2种工作状态 1 七种运行模式 处理器工作模式 特权模式 异常模式 说明 用户 xff08 user xff09
  • 计算机组成原理4(程序查询方式、程序中断方式、DMA方式及其I/O接口电路)

    文章目录 一 程序查询方式二 程序中断方式三 DMA方式 一 程序查询方式 1 程序查询方式的接口电路 2 符号说明 amp 与非门B工作触发器D完成触发器 3 程序查询工作过程 xff08 输入 xff09 xff08 1 xff09 当
  • C/C++库函数math用法案例篇一

    文章目录 1 绝对值函数 xff08 abs xff0c fabs xff0c labs xff09 2 三角函数 xff08 cos xff0c sin xff0c tan xff09 3 反三角函数 xff08 acos xff0c a
  • C/C++库函数math用法案例篇二

    文章目录 1 floor函数 xff08 求不大于x的最大整数 xff09 2 fmod函数 xff08 返回a b的余数 xff09 3 frexp xff08 将浮点数分解成尾数和指数 xff09 5 modf函数 xff08 将浮点数
  • 从C语言到C++的进阶之C到C++的转变(篇一)

    文章目录 一 C语言到C 43 43 语言1 C语言2 C 43 43 语言3 C与C 43 43 的联系 二 C到C 43 43 的明显转变1 C 43 43 的关键字系列2 函数必列参数3 指针类型相同才能赋值4 对struct等封装类
  • 从C语言到C++的进阶之C++的非类新特性(篇二)

    文章目录 1 输出输入使用 cout lt lt 和 cin gt gt 2 访问外部变量3 从指针到引用4 引用与指针的比较5 返回引用类型的函数 1 输出输入使用 cout lt lt 和 cin gt gt span class to
  • 从C语言到C++的进阶之C++的非类新特性(篇三)

    文章目录 1 从宏到内联函数2 函数参数的缺省值3 C 43 43 的常量与引用4 函数重载5 new运算和delete运算 1 从宏到内联函数 xff08 1 xff09 写一个返回最大值的宏定义 xff08 C语言 xff09 span
  • 从C语言到C++的进阶之面向对象、using与命名空间(篇四)

    文章目录 一 面向过程到面向对象二 namespace的使用三 using的用法 一 面向过程到面向对象 1 面向过程编程思想 C语言是典型的面向过程编程语言 xff0c 面向过程是一种以过程为中心的编程思想 xff0c 通过分析出解决问题
  • Angular执行测试报错: 'router-outlet' is not a known element

    本机环境 xff1a ng version Angular CLI 7 1 1 Node 10 11 0 OS darwin x64 Angular 7 1 1 animations cli common compiler compiler
  • 从C语言到C++的进阶之一些C基础上的增强用法(篇五)

    文章目录 1 全局变量的检测增强2 新增Bool类型3 三目运算的增强4 指针与常量的引用 xff08 别名 xff09 5 内联函数的限制6 函数的占位参数7 extern 34 C 34 的用法 1 全局变量的检测增强 C 43 43
  • C语言经典排序算法之快速排序(详解)

    文章目录 一 何为算法二 排序算法三 快速排序算法 一 何为算法 1 算法 xff08 Algorithm xff09 xff0c 是程序设计的灵魂 xff0c 它是利用系统的方法描述解决问题策略的机制 2 正确算法应满足的性质 xff1a
  • C语言经典查找算法之二分查找(详解)

    文章目录 一 查找算法二 二分查找算法 一 查找算法 查找是在大量的信息中寻找一个特定的信息元素 xff0c 在计算机应用中 xff0c 查找是常用的基本运算 xff0c 例如编译程序中符号表的查找 二 二分查找算法 1 算法思想 该查找算
  • C语言经典递推算法之杨辉三角展开(详解)

    文章目录 一 递推算法二 杨辉三角展开 一 递推算法 这是一种比较简单的算法 xff0c 即通过已知条件 xff0c 利用特定关系得到中间结论 xff0c 然后得到最后结果的算法 递推算法可以分为顺推和逆推两种 二 杨辉三角展开 1 杨辉三
  • C语言经典迭代算法之求解函数定积分(详解)

    文章目录 一 迭代算法二 梯形法求解定积分 一 迭代算法 1 辗转迭代 迭代法也称辗转法 xff0c 它是一种不断用旧的变量值递推得到新值的过程 迭代法是用计算机解决问题的一种基本方法 xff0c 它利用计算机运算速度快 适合做重复性操作的
  • C语言经典递归算法之和式分解

    文章目录 一 递归算法二 和式分解 一 递归算法 1 递归 递归就是自己调用自己 xff0c 它是设计和描述算法的一种有力工具 xff0c 常常用来解决比较复杂的问题 递归是一种分而治之 xff0c 将复杂问题转化难为简单的问题的求解方法
  • C语言经典枚举算法之谁在说谎(详解)

    文章目录 一 枚举算法二 谁在说谎问题 一 枚举算法 1 枚举 枚举算法是我们在日常中使用到的最多的一个算法 xff0c 它的核心思想就是 枚举所有的可能 枚举法的本质就是从所有候选答案中去搜索正确的解 2 使用枚举算法需要满足两个条件 1
  • C语言经典贪心算法之加油站问题(详解)

    文章目录 一 贪心算法二 加油站问题 一 贪心算法 贪心算法暗示一种不追求最优解 xff0c 只希望找到较为满意解的方法 贪心算法省去了为找最优解要穷尽所有可能而必须耗费大量时间 xff0c 因此它一般可以快速得到较为满意的答案 贪心算法常
  • C语言经典回溯算法之解决数的组合问题(详解)

    文章目录 一 回溯算法二 数的组合问题 一 回溯算法 1 回溯法 也叫试探法 xff0c 实际上是一个类似枚举的搜索尝试过程 xff0c 主要是在搜索尝试过程中寻找问题的解 xff0c 当发现已不满足求解条件时 xff0c 就 回溯 返回
  • C语言经典矩阵算法之打印魔方阵(详解)

    文章目录 一 矩阵算法二 打印魔方阵 一 矩阵算法 1 矩阵 矩阵 xff0c 是线性代数中的基本概念之一 一个m n的矩阵就是m n个数排成m行n列的一个数阵 由于它把许多数据紧凑的集中到了一起 xff0c 所以有时候可以简便地表示一些复