当前位置: 首页 > news >正文

(头歌作业)-6.5 幻方(project)

第1关:输出三阶幻方

任务描述
本关任务:编写一个能输出九宫图的小程序。

相关知识
为了完成本关任务,你需要掌握:
1.字符串切分为列表
2.输出列表元素

字符串切分为列表
字符串的split()方法可以将字符串切分为列表。

num = input().split()  # 输入:4 9 2
print(num)
# 输出:['4', '9', '2']
输出列表元素
列表是序列,可以在列表前加*做为print()的参数,解包裹输出列表中的元素。

示例如下:

num = input().split()  # 输入:4 9 2
print(*num)
# 输出:4 9 2
在一个由若干个排列整齐的数组成的正方形中,图中任意一横行、一纵行及对角线的几个数之和都相等,具有这种性质的图表,称为“幻方”。中国古代称为“河图”、“洛书”。

洛书蕴含奇门遁甲的布阵之道,九宫之数源于《易经》。幻方也称九宫图、纵横图、魔方、魔阵,它是科学的结晶与吉祥的象征。
古人总结的三阶幻方口诀为: 二四为肩, 六八为足, 载九履一, 左三右七, 五居中央

编程要求
根据提示,在右侧编辑器补充代码,分行输入三阶幻方的数字,各数字之间用空格分隔,先用列表形式输出幻方,再去掉方括号输出幻方。

测试说明
平台会对你编写的代码进行测试:

测试输入:
4 9 2
3 5 7
8 1 6
预期输出:
['4', '9', '2']
['3', '5', '7']
['8', '1', '6']
4 9 2
3 5 7
8 1 6

# 读取三行输入,每行转换为列表
row1 = input().split()
row2 = input().split()
row3 = input().split()# 输出列表形式的幻方
print(row1)
print(row2)
print(row3)# 输出去掉方括号的幻方,使用解包方式输出每行元素
print(' '.join(row1))
print(' '.join(row2))
print(' '.join(row3))

第2关:输出n阶奇数幻方

任务描述
本关任务:编写一个能输出九宫图的小程序。

相关知识
为了完成本关任务,你需要掌握:
1.创建空的二维列表
2.修改二维列表元素值

创建特定值的二维列表
字符串的split()方法可以将字符串切分为列表。

# 构造元素为0的二维列表
print([[0 for i in range(3)] for j in range(3)])
# [[0, 0, 0], [0, 0, 0], [0, 0, 0]] 
修改二维列表元素值
二维列表可以通过索引为每个位置上的元素赋值或修改其值

示例如下:

lst[x][y] = num  # 为列表元素赋值
幻方不限于3阶,当n为奇数时,可用以下的方法来填数。
(1)将1填入第一行的中间; 
(2)将每一个数字依次放在前一个数的右上方一格(行号减1列号加1)。
  (i)  出现越界。如果这个数所要放的格已经超出了第一行,那么就把他放在最后一行,仍然放在右一列(列号加1,参考数字“2”)。
      如果这个数所要放的格已经超过最右列,那么就把他放在最左列的上面一行(行号减1,参考数字“57”)。
  (ii)没越界,如果这个数所要放的格已经有数了,此时将其填在这个数的正下方一格(行号加1列号不变,参考数字“10”)。 
(3)矩阵的最右上方的格子(第一行最后一列)中数的下一个数填在这个数的正下方一格(参考数字“46”)。


编程要求
输入一个奇数n,输出n阶奇数幻方数。

测试说明
平台会对你编写的代码进行测试:

测试输入:
3

预期输出:

8 1 6
3 5 7
4 9 2

开始你的任务吧,祝你成功!

n = int(input())
# 创建n阶全0二维列表
magic_square = [[0 for _ in range(n)] for _ in range(n)]
row, col = 0, n // 2  # 初始位置:第一行中间列
magic_square[row][col] = 1  # 填入数字1for num in range(2, n * n + 1):# 计算下一个数的位置(右上一格)new_row = (row - 1) % nnew_col = (col + 1) % nif magic_square[new_row][new_col] != 0:# 位置已被占据,填在当前位置正下方new_row = (row + 1) % nnew_col = col# 更新位置并填入数字row, col = new_row, new_colmagic_square[row][col] = num# 输出幻方,每行元素用空格分隔
for row in magic_square:print(' '.join(map(str, row)))

第3关:输出4n阶偶数幻方

任务描述
本关任务:编写一个能输出九宫图的小程序。

相关知识
为了完成本关任务,你需要掌握:
1.创建空的二维列表
2.修改二维列表元素值

创建特定值的二维列表
字符串的split()方法可以将字符串切分为列表。

# 构造元素为0的二维列表
print([[0 for i in range(3)] for j in range(3)])
# [[0, 0, 0], [0, 0, 0], [0, 0, 0]] 
修改二维列表元素值
二维列表可以通过索引为每个位置上的元素赋值或修改其值

示例如下:

lst[x][y] = num  # 为列表元素赋值
4阶幻方的填法:将数字从左到右、从上到下按顺序填写:

将对角线上的数字,换成与它互补的数字。
把1换成17-1 = 16;
把6换成17-6 = 11;
把11换成17-11 = 6
……
换完后就是一个四阶幻方。

对于n=4k阶幻方,先把数字按顺序填写。把它划分成kk个44的方阵。
然后把每个小方阵的对角线,象制作4阶幻方的方法一样,对角线上的数字换成互补的数字,就构成幻方。 
下图以8阶幻方为例:
(1) 先把数字按顺序填。然后,按44把它分割成2*2个小方阵

(2) 每个小方阵对角线上的数字,换成和它互补的数。

编程要求
输入一个整数n(n为4的整数倍),输出n阶偶数幻方数。
(每个输出的数字后面用一个制表符分隔)

测试说明
平台会对你编写的代码进行测试:

测试输入:
4

预期输出:

16    2    3    13    
5    11    10    8    
9    7    6    12    
4    14    15    1    

开始你的任务吧,祝你成功!

n = int(input())
if n % 4 != 0:print("输入必须是4的整数倍")
else:# 创建一个n x n的矩阵,初始值为0magic_square = [[0] * n for _ in range(n)]# 填充数字num = 1for i in range(n):for j in range(n):magic_square[i][j] = numnum += 1# 计算互补数的基数complement_base = n * n + 1# 处理每个4x4的小方阵for i in range(0, n, 4):for j in range(0, n, 4):# 主对角线(左上到右下)for k in range(4):magic_square[i + k][j + k] = complement_base - magic_square[i + k][j + k]# 副对角线(右上到左下)for k in range(4):magic_square[i + k][j + 3 - k] = complement_base - magic_square[i + k][j + 3 - k]# 输出幻方for row in magic_square:for num in row:print(num, end='\t')print()

第4关:输出4n+2阶偶数幻方数

任务描述
本关任务:编写一个能输出九宫图的小程序。

相关知识
为了完成本关任务,你需要掌握:
1.创建空的二维列表
2.修改二维列表元素值

创建特定值的二维列表
字符串的split()方法可以将字符串切分为列表。

# 构造元素为0的二维列表
print([[0 for i in range(3)] for j in range(3)])
# [[0, 0, 0], [0, 0, 0], [0, 0, 0]] 
修改二维列表元素值
二维列表可以通过索引为每个位置上的元素赋值或修改其值

示例如下:

lst[x][y] = num  # 为列表元素赋值
4n+2阶可以看做2(2n+1),这样一来就转化成了四个求解2n+1阶幻方。
下面以6阶幻方为例(4n+2=6,n=1)
1.把整个表格分成4个(2n+1)的小表格,分别叫A,B,C,D:

2.这样A,B,C,D个小表格就成奇数幻方问题了。
①.将1,2,…,(2n+1)(2n+1)这些数划分给A,并对A实现奇数幻方;
②.将(2n+1)(2n+1)+1,…,2(2n+1)(2n+1)这些数划分给B,并对B实现奇数幻方;
③.将2(2n+1)(2n+1)+1,…3(2n+1)(2n+1)这些数划分C,并对C实现奇数幻方;
④.将3(2n+1)(2n+1)+1,…4(2n+1)(2n+1)这些数划分D,并对D实现奇数幻方。

3.从A表中的中心(即第n行的MagicSquare[n][n])开始,按照从左向右的方向,标出n个数,A表中的其他行则标出最左边的n格中的数(在图中用红色背景标出)。并且将这些标出的数和C表中的对应位置互换。

4.在B表中的中心(如上解释)开始,自右向左,标出n-1列,将B中标出的数据与D表中对应位置的数据交换。但是6阶幻方中,n-1此时等于0,所以B与D不用做交换


下面是6阶幻方的填法:6=4×1+2,这时k=1


编程要求
输入一个整数n(n为4k+2的倍数),输出4k+2阶偶数幻方数。
(输出之间用制表符分隔)

测试说明
平台会对你编写的代码进行测试:

测试输入:
6

预期输出:

33    1    8    24    19    26    
7    32    3    25    23    21    
29    9    4    20    27    22    
6    28    35    15    10    17    
34    5    30    16    14    12    
2    36    31    11    18    13    

开始你的任务吧,祝你成功!

 

相关文章:

  • Web后端基础(Maven基础)
  • 8.axios Http网络请求库(1)
  • 源码编译 Cas Server 4/5/6/7
  • 无人机军用与民用技术对比分析
  • App使用webview套壳引入h5(三)——解决打包为app后在安卓机可物理返回但是在苹果手机无法测滑返回的问题
  • Uniapp 二维码生成与解析完整教程
  • win32相关(远程线程和远程线程注入)
  • Spring框架学习day7--SpringWeb学习(概念与搭建配置)
  • 深度解析地质灾害风险普查:RS与GIS技术在泥石流、滑坡灾害中的应用,ArcGIS数据管理、空间数据转换、专题地图制作、DEM分析及实战案例分析
  • 实用对比图软件推荐:快速呈现信息差异
  • opencv-4.8.1到 sln
  • Excel数据分析:基础
  • Tensorrt python api 10.11.0笔记
  • 红花UGT鉴定与特征分析-文献精读142
  • 本地部署大模型实战:使用AIStarter一键安装Ollama+OpenWeb教程(含最新版本更新指南)
  • 适用于vue3的大屏数据展示组件库DataV(踩坑版)
  • QQ邮箱发送验证码(Springboot)
  • vue和uniapp聊天页面右侧滚动条自动到底部
  • 第六个微信小程序:教师工具集
  • 负载均衡将https请求转发后端http服务报错:The plain HTTP request was sent to HTTPS port
  • 软件开发外包公司靠谱吗/肇庆seo按天计费
  • 城市旅游网站开发/怎么在网上推广产品
  • 医院做网站的费用多少/短视频培训
  • 如何选择做网站/广告推广营销网站
  • 瘦身网站开发目的/武汉seo招聘
  • 品牌网站建设费/营销app