Python旋转魔方阵
【问题描述】
输入一个自然数N(2≤N≤9),要求输出如下的魔方阵,即边长为N*N,元素取值为1至N*N,1在左上角,呈顺时针方向依次放置各元素。
N=3时:
1 2 3
8 9 4
7 6 5
【输入形式】
从标准输入读取一个整数N。
【输出形式】
向标准输出打印结果。输出符合要求的方阵,每个数字占5个字符宽度,向右对齐,在每一行末均输出一个回车符。
【输入样例】
4
【输出样例】
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
1 Dir_tuple = ('右', '下', '左', '上')
2 def dir_changer(counter, direction, lap_len):#创建转向函数
3 if counter == lap_len:#从右转向下
4 return ('下',0)
5 elif counter == (lap_len*2)-1:#从下转向左
6 return ('左',0)
7 elif counter == (lap_len*3)-2:#从左转向上
8 return ('上',0)
9 elif counter == (lap_len*4)-4:#从上转向右
10 return ('右',1)#返回缩小待填充矩阵的参数
11 else:
12 return (direction,0)#不作转向处理
13
14
15 def mof(n):
16 alist = []#创建空列表
17 blist = [0] * n
18 for i in range(n):
19 alist.append(blist[:])#创建矩阵
20 counter = 0#初始化计数器
21 lap_len = n#初始化边长
22 direction = '右'#初始化方向
23 x = y = 0#初始化坐标
24
25 for i in range(1,pow(n,2)+1):#将1到n**2填充至矩阵中
26 alist[y][x] = i#填充
27 counter += 1#计数器增加
28 direction, lap_change= dir_changer(counter, direction, lap_len)#调用转向函数
29 if lap_change == 1:#缩小待填充矩阵
30 lap_len -= 2
31 counter = 0#重置计数器
32 if direction == '右':#转向
33 x += 1
34 elif direction == '下':
35 y += 1
36 elif direction == '左':
37 x -= 1
38 elif direction == '上':
39 y -= 1
40 return alist#返回矩阵
41
42 N = int(input())
43 res_list = mof(N)
44 for i in res_list:#打印
45 for j in i:
46 print("{:5}".format(j),end='')
47 print()
Python旋转魔方阵的更多相关文章
- SDUST 作业10 Problem D 魔方阵
Description 所谓N阶魔方阵,是一个N*N的方阵,其元素由1到N^2组成,且方阵每行每列以及对角线的元素和相等.如三阶魔方阵: 8 1 6 3 5 7 4 9 2 魔方阵的规律如下: ...
- 基于visual Studio2013解决C语言竞赛题之0523魔方阵
题目
- Project 3:N级魔方阵
魔方阵:由n*n个数字所组成的n阶方阵,具有各对角线,各横列与纵行的数字和都相等的性质,称为魔方阵.而这个相等的和称为魔术数字.若填入的数字是从1到n*n,称此种魔方阵为n阶正规魔方阵. 目标:输入一 ...
- C语言复习---输出魔方阵
一:奇魔方阵 算法: 1.第一个元素放在第一行中间一列 .下一个元素存放在当前元素的上一行.下一列. .如果上一行.下一列已经有内容,则下一个元素的存放位置为当前列的下一行. 在找上一行.下一行或者下 ...
- 牛客网 牛客小白月赛2 A.数字方阵-反魔方阵,梁邱构造法
天坑未补... 水一波博客,再不写博客就咸成鱼干了,只写题不写题解,过一段时间就忘了自己学过什么了. 最近重点就是把开学以来写的题补出来,没学的就滚去学会啊(= =),填一下坑... 从这篇博客开始, ...
- C语言---魔方阵
魔方阵的定义:在n*n的方阵中,每一行的和=每一列的和=对角线的和.(本文中涉及的n为大于3的奇数). 例如3*3的魔方阵为: 5*5的魔方阵为: 如何写魔方阵呢? 1.数字1位于第一行的正中间2.下 ...
- CSS3动画之旋转魔方盒
步骤: 1.大盒子里盛放六个子盒子代表立方体的6个面: 2.子盒子开启3d效果 transform-style:preserve-3d; 3.上下面沿X轴旋转90度,一个上移盒子一半高,一个下移盒子 ...
- python 旋转数组 多种解题思路
leetcode 题目描述:给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. 尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题. 要求使用空间复杂度为 O(1) 的 ...
- python 旋转数组
#!/usr/bin/env python3 #-*-encoding:utf-8-*- l = [] u = [] q = 5 xx=[[col for col in range(q)] for r ...
随机推荐
- [bzoj1711]吃饭
由于无法直接将果汁和饮料连边,所以将人放在中间,果汁和饮料放在两侧,然后分别向对应的人连边.同时,为了保证每一个人只被算一次,对每一个人裂点,两个点中间连一条流量为1的边. 1 #include< ...
- [atARC068F]Solitaire
对于最终的序列$a_{i}$,条件如下: 1.$a_{i}$是一个排列,且$a_{k}=1$ 2.不存在三元组$1\le x<y<z<k$,使得$a_{x}<a_{y}< ...
- 多声部处理细节之crossstaff音符处理
下面给出这几个案例的代码 ,可直接粘贴编译. \version "2.20.0" \language "english" \paper { #(set-pape ...
- Python之99乘法表代码
#coding=utf-8 #左下三角格式输出九九乘法表 for i in range(1,10): for j in range(1,i+1): print " ...
- java 桥接模式实现代码
写在前面 桥接模式:将抽象与实现分离,使它们可以独立变化.它是用组合/聚合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度. 使用场景1:要绘制矩形.圆形.椭圆.正方形,绘制的图形需 ...
- Codeforces 251D - Two Sets(异或方程组)
题面传送门 题意: 你有一个可重集 \(S=\{a_1,a_2,\dots,a_n\}\),你要把它划分成两个可重集 \(S_1,S_2\) 使得 \(S\) 中每个元素都恰好属于 \(S_1\) 与 ...
- Codeforces 704C - Black Widow(dp)
Codeforces 题目传送门 & 洛谷题目传送门 u1s1 感觉这种题被评到 *2900 是因为细节太繁琐了,而不是题目本身的难度,所以我切掉这种题根本不能说明什么-- 首先题目中有一个非 ...
- expr判断文件名以固定格式结尾
#!/bin/bash if expr "$1" : ".*\.sh" &>/dev/null then echo "okok" ...
- 在C++的map类型中按value排序
1.将map转化为vector类型 2.使用sort函数对vector进行排序,写出compare比较器函数 3.比较器中指明按照第几个元素来排序 1 #include <iostream> ...
- Windows端口被占用解决方法
Error 场景 启动 Java 项目失败,控制台显示 Error starting ApplicationContext. To display the conditions report`re-r ...