输出魔方阵,C语言与Python实现

经典题目螺旋方阵的详解 7-102 螺旋方阵 (20分) 所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。 输入格式: 输入在一行中给出一个正整数N(<10)。 输出格式: 输出N×N的螺旋方阵。每行N个数字,每个数字占3位。 输入样例: 5 输出样例: 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 #include& 阅读详情

上题目

在这里插入图片描述

  • 就是横竖斜的值相加相等
    在这里插入图片描述

规律:

  • 1.第一行中间一列的值为1。所以用j=n/2+1确定1的列数,得出a[1][j]=1。

  • 2.每一个数存放的行比前一个数的行数减1,列数加1。行数用i=i-1确定,列数用j=j+1确定。

  • 3.如果一个数行数为第一行,则下一个数行数为最后一行。

  • 4.如果一个列行数为最后一列,则下一个数列数为第一列。

  • 5.如果按上面的规则确定的位置上已有数,或上一个数是第一行最后一列,则把下一个数放在上一个数的下面。

解法:
  • 利用二维数组表示实现
  • 将上述五点规律用代码表示

C语言实现

// 打印指定阶数的 魔方阵
#include <stdio.h>
int main()
{
	int n, k , j, mo[50][50] = {0};		
	printf("请输入打印魔方阵的阶数:\n");
	scanf("%d", &n);
	// k, j 表示初始的 数字 1 位置, 下面表示循环当前元素的 位置
	k = 0;
	j = n/2; 
	// 给数字 1 填入数组中
	mo[k][j] = 1;
	
	// 1已经填进去了,我们将其他数 通过规律填到数组当中
	for(int i=2; i<=n*n; i++)
	{
		// 条件5 的数字该这样填进去
		if ((k == 0 && j == n - 1) || mo[(k-1 + n)%n][(j+1+n)%n] != 0) 
		{
			k = k +1;
			mo[k][j] = i;
		}
		// 2,3,4 都是一个东西, 用 k = (k-1 + n)%n; 这种 取模的运算,假如 5阶的魔法阵,5 + 1 = 1
		else
		{
			// 下一元素行
			k = (k-1 + n)%n;
			// 下一元素列
			j = (j+1+n)%n;
			mo[k][j] = i;
		}
	}
	// 打印魔方阵
	for(i = 0; i < n; i++)
	{
		for(int b = 0; b< n; b++)
		{
			printf("%6d", mo[i][b]);
		}
		printf("\n");
	}
	return 0;
}

Python实现

  • 暂时也没想到简单的实现方式,还是按照C语言的写法,写出Python语法版本的~
  • 当中用到一个嵌套列表表达式, 生成 二维数组,其实也可以使用 numpy实现,array
n = int(input("请输入魔方阵的阶层:"))

# 使用嵌套列表推导式生成类似C语言的二维数组,元素均为0
mo = [[0 for i in range(n)] for i in range(n)]
k = 0
j = int(n/2)
mo[k][j] = 1
for i in range(2, n**2+1):
    if (k==0 and j == n-1) or (mo[(k-1 + n)%n][(j+1+n)%n] != 0):
        k += 1
        mo[k][j] = i
    else:
        k = (k - 1 + n)%n
        j = (j + 1 + n)%n
        mo[k][j] = i

for i in mo:
    print(i) 

C语言:单偶魔方阵的实现(不是4的倍数) 单偶魔方阵:就是当n不可以被4整除时的偶阶幻方,即4K+2阶幻方。如(n = 6,10,14,……)的幻方。 实现方法:(以10阶幻方为例)。这时,k=2. (1)把魔方阵分为A,B,C,D四个象限,这样每一个象限肯定是奇数阶。用奇数阶象限的填充数字的方法(罗伯法),依次在A象限,D象限,B象限,C象限填数。 (2)在A象限的中间行、中间格开始,按自左向右的方向,标出k格。A象限... 阅读详情

相关推荐

【华为OD-E卷 -65 学生方阵 100分(python、java、c++、js、c)】

我们可以沿着四个方向(水平、垂直、对角线)进行搜索,每次从矩阵中的一个 “M” 字符开始,沿着某个方向扩展,直到遇到非 “M” 字符或者越界。四个方向的偏移量是:右((0, 1))、下((1, 0))、右下((1, 1))和左下((1, -1))。四个方向的偏移量是:右((0, 1))、下((1, 0))、右下((1, 1))和左下((1, -1))。每个 “M” 字符都可能是一个连通序列的起点,因此需要尝试从每个 “M” 开始沿四个方向进行搜索,计算当前方向上的连通长度。

CodeClimb的博客 851

(Python)魔方阵

【问题描述】输入一个自然数N(1≤N≤9),要求输出如下的魔方阵,即边长为2*N-1,N在中心出现一次,其余位置上的数字从外向中心逐渐增大。 N=3时: 11111 12221 12321 12221 11111 N=4时: 1111111 1222221 1233321 1234321 1233321 1222221 1111111 【输入形式】 从标准输入读取一个整数N。 【输出形式】 向标准输出打印结果。输出符合要求的方阵,每个数字占一个字符宽度,在每一行末均输出一个回车符。 【输入样例】 3 【输出

qq_52491362的博客 4140

处理异常java程序实验报告

这是java中处理异常的实验报告——在student类中,在addGrade的时候可能发生异常,比如加分后分数超过100或者小于0。在setName的时候也可能产生异常,比如设置name为空字符串,姓名中含有数字、字母或者符号(只允许使用中文),或者姓名的长度超过10个字符

【Java程序设计】Java上机实验(二)

实验二、数组     一、实验目的: 1、学会使用一维与二维数组管理简单数据。 2、学会编写简单的菜单驱动(命令行式)的Java程序 二、实验环境: BLUEJ 三、实验内容: (写出主要的内容) 1.定义一个int型的一维数组,数组的长度由键盘输入,为数组中的元素随机赋值。依次完成如下功能: (1) 输出数组中的元素。每行输出最多十个数字,数字之间用Tab键分隔; (2) 计算数组中元素之和,并输出; (3) 求出数组中元素的最大值及其位置(若有多个相同的最大值,仅输出第一个),并输出

passer__jw767的博客 1480

Java大学实用教程 实验二 基本数据类型和数组 实验报告

Java大学实用教程 实验二 基本数据类型和数组 实验报告 耿祥义 自己写的 可直接用!

瑞萨CS+仿真器高级配置指南:从原理到实战优化RX系列MCU调试

在嵌入式系统开发中,仿真器是进行早期验证和深度调试的核心工具。它通过精确模拟目标微控制器的指令集、内存和外设行为,构建了一个虚拟的硬件沙盒环境。其工作原理在于对CPU核心、时钟系统和外设接口的软件模拟,使开发者能在无物理硬件时进行代码逻辑验证、内存布局规划和时序分析。这项技术的核心价值在于大幅降低开发成本、加速问题定位,并支持复杂场景的复现与测试。在瑞萨RX系列MCU开发中,CS+集成开发环境内置的仿真器功能尤为强大。本文聚焦于**指令解码缓存**和**外设时钟比率**等关键配置的深度解析,阐述如何通过优化

cmff98425的博客 1119

(20201007)编程每日一题_C程序设计_利用数组批量处理数据(1)

6.数组处理批量数据 6.1 为数组赋值0~9,并将数组元素逆序输出 #include<stdio.h> int main() { int i,a[10]; //定义整型变量i ,整型数组a for(i=0;i<=9;i++) //循环for为数组元素赋值 a[i]=i; for(i=9;i>=0;i--) //循环for 将数组元素逆序输出 printf("%d",a[i]); printf("\n"); return 0; } 6.2 输出斐波那契

where is redhat 411

Android架构中UseCase的设计原则与实战解析

本文深入解析Android架构中UseCase的设计原则与实战应用,探讨其在Domain Layer中的核心作用。通过对比ViewModel的臃肿问题,详细阐述UseCase的无状态原则、单一职责边界等设计铁律,并提供多种实现方式的代码示例,帮助开发者构建更清晰、高效的Android应用架构。

weixin_28432777的博客 431

5.超级递增序列指的是一个整数序列,这个序列中的每一个整数都要比它前面所有整数的和大。编写一个程序,读入一组整数,然后判断这组整数是否为超级递增序列。

package monster.zf.Test; import java.util.Arrays; import java.util.Scanner; /** * 5. * (选做)超级递增序列指的是一个整数序列,这个序列中的每一个整数都要比它前面所有整数的和大。 * 编写一个程序,读入一组整数,然后判断这组整数是否为超级递增序列。 输入格式为:数组长度n 数1 数...

Monster丶ZF的博客 6692

手把手教你用光耦搭建安全隔离电路:从洗衣机控制板到PLC输入模块实战

本文通过洗衣机控制板驱动高压电机和PLC输入模块采集现场信号两个实战场景,手把手教你使用光耦搭建安全隔离电路。文章详细解析了电路架构、关键器件选型、参数计算、仿真验证及PCB布局避坑技巧,并对比了光耦与数字隔离器的适用场景,帮助电子工程师掌握这门保障系统稳定与安全的必备技能。

h6j7k8l9p0的博客 462

【知识点总结】电路原理 第一讲

大家好,从今天起,我将开始更新自上大学以来所学到的各种知识,之所以选择更新它们是因为最近我一直在收拾整理自己自上大学以来所收获到的各种知识,看着那厚厚一沓的书本心里不由得犯愁。如果我想找到特定的知识,那岂不是得翻到猴年马月。俗话说得好,下雨天打鞋子,闲着也是闲着,为此我设置一个专栏,将知识点一一分类总结,目的在于更好的整理所学的知识。本人学艺不精,有一些知识点地方可能存在瑕疵,希望各位大佬可以多多指教。以下是本篇文章正文内容虚断:一般通用性运算放大器的正反向输入端之间的电阻非常非常的大。

weixin_51130221的博客 4万+

100个python算法超详细讲解:魔方阵

【100个python算法超详细讲解】@谷哥技术1.问题描述 编写程序,实现如图8.13所示的5-魔方阵。 2.问题分析 所谓“n-魔方阵”,指的是使用l~n 2 共n 2 个自然数排列成一个n×n的方阵,其中n 为奇数。该方阵的每行、每列以及对角线元素之和都相等,并为一个只与n有关的常 数,该常数为n×(n 2 +1)/2。 例如,图8.13所示的5-魔方阵,其第一行、第一列以及主对角线上各元素之和如 下。 第一行元素之和:17+24+1+8+15=65 第一列元素之和:17+23+4+10+11=65

Lee达森的博客 4632

ChatTutor:让AI老师“会写会画”,打造可视化、互动式智能教育新范式

ChatTutor是一款突破性的开源AI教学助手,通过可视化电子白板实现"边讲边写"的沉浸式教学体验。该项目支持数学公式手写输入、动态函数绘图、自动生成思维导图等功能,采用多智能体架构实现专业协同。未来将扩展至编程、物理等STEM教育领域,适用于学生自学、教师备课和教育平台集成。作为MIT协议开源项目,ChatTutor通过赋予AI"教学肢体语言",推动教育从信息传递转向可视化互动建构,重新定义了AI助教的可能性。

这里汇聚了前沿的技术分享与实用的开发技巧,带你探索从创意到企业的技术创业之路。 421

输出“魔方阵“

输出"魔方阵"。所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。 #include<stdio.h> int main() { int a[15][15], i, j, k,n=0; //校验输入的是不是偶数或者是不是超过了15 while ((n % 2 == 0) || (n > 15) || (n==0)) { printf("输入n的值,不能是偶数,不能超过15:"); scanf("%d", &n); } //将数组用0初始化 .

yangdingyu的博客 634

Android 蓝牙——概述(一)

Profiles (蓝牙应用规范),它从应用场景的角度为蓝牙技术的使用制定了不同的规范。这也是和大众日常生活接触最多的一部分。蓝牙支持很多Profiles:MAP:(MessageAccessProfile),短信访问协议,允许设备间的信息交换,短信。使用场景:智能车载中同步短信等信息。HFP:(Hands-free Profile),电话免提协议,让蓝牙设备(如蓝牙耳机/车机)可以控制电话,如接听、挂断、拒接等。

小旭的专栏 3491

我用 Python 监听了自己的键盘,生成击键热力图,看看每天到底在“摸鱼”还是“搬砖”?

数据采集(监听)、持久化(I/O)与可视化展示,必须是三个完全独立的模块,这符合单一职责原则。在多线程读写 Python 字典时,锁住的时间要尽可能短,防止 I/O 线程把高频的监听线程阻塞住。这类涉及底层的代码与“键盘记录木马”只有一线之隔。永远不要把击键记录通过网络上传,所有数据必须localhost消化。人脑对枯燥的 JSON 日志是不敏感的,但对颜色和空间极其敏感。这也是为什么 Prometheus + Grafana 是标配。使用ctypes。

BUG猿的博客 192

魔方阵

#include int main() { int a[15][15]; int i; int j; int k; int p; int n; p=1; while(p==1) { printf("enter n(n=1--15):"); scanf("%d",&n); if((n!=0)&&(n<=15)&&(n%2!=0)) { p=0; } }

ZDF0414的专栏 617

Clawdbot安装教程:从零开始到接入飞书

这几天,Clawdbot把整个科技圈都刷屏了。就是这个胖逼小龙虾🦞。不过现在改名叫Moltbot了。原因很简单:被Anthropic告了。Anthropic觉得Clawdbot这名字太像Claude Code的延伸产品,要求改名。真的,Anthropic你这家伙…更离谱的是,因为Clawdbot太火,Mac Mini都被抢断货了。无数人为了用它,疯狂买Mac Mini。我刚打开美团外卖,发现居然没货了???

Maynor的博客 2178

华为2019校招笔试题之旋转方阵(C语言版、python)

题目描述: – 输入一个N阶方阵(0<N<10),输出此方阵顺时针旋转M(0<=M<=10000)次后的方阵 – 旋转举例:(如下四个三阶方阵从上到下为数字围绕中心顺时针旋转 1 2 3 4 5 6 7 8 9 7 4 1 8 5 2 9 6 3 9 8 7 6 5 4 3 2 1 3 6 9 2 5 8 1 4 7 输入描述: (1) 输入第一行一个正整数N (0<...

weixin_45231450的博客 2990

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【华为OD】D卷真题200分:学生方阵 JavaScript代码实现

学校组织活动,将学生排成一个矩形方阵。请在矩形方阵中找到最大的位置相连的男生数量。这个相连位置在一个直线上,方向可以是水平的、垂直的、呈对角线的或者反对角线的。输入的第一行为矩阵的行数和列数,接下来的n行为矩阵元素,元素间用“,”分隔。使用递归的方式来实现,从各个方向去匹配。输出一个整数,表示矩阵中最长的位置相连的男生个数。输入输出示例仅供调试,后台判题数据一般不包含示例。注:学生个数不会超过10000.

十年以上编程经验的干货分享 1073

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

数字旋转方阵c语言主函数,华为2019校招笔试题之旋转方阵(C语言版、python)

题目描述:– 输入一个N阶方阵(0– 旋转举例:(如下四个三阶方阵从上到下为数字围绕中心顺时针旋转1 2 34 5 67 8 97 4 18 5 29 6 39 8 76 5 43 2 13 6 92 5 81 4 7输入描述:(1) 输入第一行一个正整数N (0(2) 接下来N行每行N个整数用空格分开,为方阵的数据(3) 接下来一行一个正整数M (0<=M<=10000)说明:不用考...

weixin_39603132的博客 557

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【华为OD】D卷真题200分:学生方阵 Java代码实现

学校组织活动,将学生排成一个矩形方阵。请在矩形方阵中找到最大的位置相连的男生数量。这个相连位置在一个直线上,方向可以是水平的、垂直的、呈对角线的或者反对角线的。输入的第一行为矩阵的行数和列数,接下来的n行为矩阵元素,元素间用“,”分隔。使用递归的方式来实现,从各个方向去匹配。输出一个整数,表示矩阵中最长的位置相连的男生个数。输入输出示例仅供调试,后台判题数据一般不包含示例。注:学生个数不会超过10000.

十年以上编程经验的干货分享 806

华为OD机试真题——最大相连男生数学生方阵(2025A卷:200分)Java/python/JavaScript/C/C++/GO最佳实现

华为OD机试真题——最大相连男生数学生方阵(2025A卷:200分)Java/python/JavaScript/C/C++/GO最佳实现

专注分享技术、实用优质教程、资源 1943

【C语言练习题】数字螺旋方阵

已知n=5、6时的螺旋方阵如输出样例所示,请观察并得到其规律。输入一个正整数n,要求输出n×n个数字构成的螺旋方阵。首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试输入一个正整数n(n≤20)。对于每组测试,输出n×n的数字螺旋方阵。各行中的每个数据按4位字符宽度输出。注意:n为奇数和偶数时的情况不同需要分别思考。

iiiii_III__的博客 543

Python123:找出不是两个数组共有的元素、矩阵运算、方阵循环右移(C语言)

Python123:找出不是两个数组共有的元素、矩阵运算、方阵循环右移(C语言)

chat8052的博客 1697

螺旋方阵

所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。 输入格式: 输入在一行中给出一个正整数N(<10)。 输出格式: 输出N×N的螺旋方阵。每行N个数字,每个数字占3位。 输入样例: 5 输出样例: 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 2...

海马有力量的博客 613
上一篇: 超细节讲解杨辉三角!C语言与Python实现
下一篇: 汉诺塔问题(Hanoi) C语言与Python实现
我是py呀
博客等级 码龄8年 205粉丝 130原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值