用python来解 PAT 1050螺旋矩阵-25-满分无超时

PAT1050 螺旋矩阵 (25 分)【全部通过 关于段错误的原因 以及测试点7】 心得 思路:一个0~10000的数写成M*N的形式,且M>N,则M的范围是0~10000,N的范围是0~100 这个对于m,n的判断很重要,因为二维数组不能开的太大,10000*10000会显示段错误 几种段错误的原因:数组访问越界,或者数组开得过大 如何判断测试点是几:吸收测试点的total之后,用if判断,二分法,如果大于某数,直接返回(看结果是段错误还是答案错误,再二分) 测试点7是9... 阅读详情

根据题意:给定N个整数,按照非递增的顺序填充进m行n列的螺旋矩阵(左上角开始螺旋),要求m,n满足:m×n 等于 N;m≥n;且 m−n 取所有可能值中的最小值。

先分析,这个题目大概分两个步骤:先求m,n,再进行螺旋填充,我的代码分三步,求出m,n后先生成了一个m行n列的全0矩阵,然后再进行填充。

我的求m,n的方法是用的二分法加循环,但是这种方法会超时,因为计算次数太多,所以我改用先求根的方法,比二分法简单太多了,至于生成全0矩阵,两个for循环就ok了,当然也可以直接用列表生成式,最后填充才是最难的,想了很久,发现如果不建坐标系是做不出来的(也可能是我太菜了),所以只能建坐标系,打了下草稿,发现建了坐标系之后一切都豁然开朗:

0,00,10,2
1,01,11,2
2,02,12,2
3,03,13,2

就以4*3的矩阵为例,螺旋填充顺序是由(0,0)开始,因为行为y,列为x,所以(0,0)->(y,x),向右填充过程中x+1,x等于列-1时停止,向下填充,y+1,y等于行-1时停止,向左填充,x-1,x等于0时停止,向上填充,y-1,外圈填充结束后,x,y分别加一,继续进行内圈填充,按照这个逻辑,代码如下:

import math
n = int(input())  # 需填充的正整数数量
l = list(map(int, input().split()))
l.sort()
l.reverse()# 得到待填充数的非递增序列

# 求m,n
num = math.sqrt(n)
if num % 1 == 0:
    column = row = int(num)
else:
    row = int(num) + 1
    while n % row != 0:
        row += 1
    column = n // row

# row = 0
# column = 0
# min_v = n
# for i in range(1, int(n / 2)):#二分法
#     if n % i == 0 and abs(n // i - i) < min_v:
#         min_v = abs(n // i - i)
#         row = max(n // i, i)
#         column = min(n // i, i)
#     else:
#         continue   #超时案例

# 生成一个全0矩阵
ling = []
for i in range(row):
    li = []
    for j in range(column):
        li.append(0)
    ling.append(li)     #可以简化成列表生成式ling = [[0]*column for i in range(row)]


left = 0
top = 0
x = 0
y = 0
i = 0
while i<n:
    if i == n-1:
        ling[y][x] = str(l[i])
        i +=1
    while x < column - 1 and i < n:
        ling[y][x] = str(l[i])
        x +=1
        i +=1
    while y < row - 1 and i < n:
        ling[y][x] = str(l[i])
        y +=1
        i +=1
    while x > left and i < n:
        ling[y][x] = str(l[i])
        x -=1
        i +=1
    while y > top and i < n:
        ling[y][x] = str(l[i])
        y -=1
        i +=1
    left +=1
    top +=1
    column -=1
    row -=1
    x +=1
    y +=1

for g in ling:
    print(' '.join(g))

提交结果:

FT2004(D2000)开发实战之网口stmmac报错调试(Failed to reset the dma) 网口stmmac报错调试(Failed to reset the dma) 阅读详情

相关推荐

HDMI协议介绍(一)--Overview

HDMI全称(High Definition Multimedia Interface)高清多媒体接口,支持在单线缆上传输全数字高清视频和多声道音频。

SlamDunk的博客 2万+

1050. 螺旋矩阵(25) python篇

1050. 螺旋矩阵(25) 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题要求将给定的N个正整数按非递增的顺序,填入“螺旋矩阵”。所谓“螺旋矩阵”,是指从左上角第1个格子开始,按顺时针螺旋方向填充。要求矩阵的规模

zjw_python的博客 1434

SGM5860x高精度ADC驱动开发与SPI接口实战指南

本文详细介绍了SGM5860x高精度ADC芯片的驱动开发与SPI接口配置实战。内容涵盖芯片特性、SPI通信设置、寄存器映射、驱动初始化、数据采集处理、校准优化及调试技巧,帮助开发者快速掌握国产24位ADC的应用,提升工业测量项目的精度与稳定性。

vvv99的博客 718

每日一题——Python实现PAT乙级1050 螺旋矩阵(举一反三+思想解读+逐步优化)6千字好文

这段代码在功能上实现了将一组数字按螺旋顺序填充到矩阵中,并且在时间和空间复杂度上都是高效的。代码结构清晰,函数职责明确,易于理解和维护。主要的时间消耗来自于排序和矩阵填充,而空间消耗主要由矩阵和排序决定。总体来说,这是一段设计良好且高效的代码。这段代码在功能上实现了将一组数字按螺旋顺序填充到矩阵中,并且在时间和空间复杂度上都是高效的。代码结构清晰,函数职责明确,易于理解和维护。主要的时间消耗来自于排序和矩阵填充,而空间消耗主要由矩阵和输入数据决定。总体来说,这是一段设计良好且高效的代码。

weixin_44915521的博客 768

告别Visual Studio!用MSYS2+GCC+CMake在Windows上打造Linux式C++开发环境(保姆级避坑)

本文详细介绍了如何在Windows上使用MSYS2+GCC+CMake搭建Linux式C++开发环境,替代Visual Studio。从MSYS2的安装配置、MinGW-w64 GCC工具链的部署,到CMake项目的创建与构建,提供了保姆级教程和常见问题解决方案,帮助开发者高效过渡到命令行开发模式。

weixin_30298497的博客 325

Matlab:常见涡旋光束仿真

代码: clc clear all close all %% 环形涡旋光束 N = 200; lambda = 632e-9; %波长为632nm k = 2*pi/lambda; %波数 w0 = 3; %束腰半径 x = linspace(-10,10,N); y = linspace(-10,10,N); [X,Y] = meshgrid(x,y); [t...

zzz997的博客 3万+

1050 螺旋矩阵 Python实现

1050螺旋矩阵(25分) 本题要求将给定的N个正整数按非递增的顺序,填入“螺旋矩阵”。所谓“螺旋矩阵”,是指从左上角第 1 个格子开始,按顺时针螺旋方向填充。要求矩阵的规模为m行n列,满足条件:m×n等于N;m≥n;且m−n取所有可能值中的最小值。 输入格式: 输入在第 1 行中给出一个正整数N,第 2 行给出N个待填充的正整数。所有数字不超过10​4​​,...

BTboay 1993

激光条纹中心提取——Steger

激光条纹中心提取-Steger 好久没有记录了,记录一下今天学习的内容,据说Steger在激光条纹中心提取上神一般的存在。文章和代码都分享给大家了哈,其中有四个文件,3个C++,一个python,python一个抠图文件,3个c++包含背景图+原图, 单张图提取, 多张图提取。 分享代码 #include <opencv2\core.hpp> #include <opencv2\highgui.hpp> #include <opencv2\imgproc.hpp> #i

CharmsLUO的博客 5380

(python 3)1050 螺旋矩阵 (25分)

1050螺旋矩阵(25分) 本题要求将给定的N个正整数按非递增的顺序,填入“螺旋矩阵”。所谓“螺旋矩阵”,是指从左上角第 1 个格子开始,按顺时针螺旋方向填充。要求矩阵的规模为m行n列,满足条件:m×n等于N;m≥n;且m−n取所有可能值中的最小值。 输入格式: 输入在第 1 行中给出一个正整数N,第 2 行给出N个待填充的正整数。所有数字不超过10​4​​,相邻数字以空格分隔。 输出格式: 输出螺旋矩阵。每行n个数字,共m行。相邻数字以 1 个空格分隔,行...

Hanlin的博客 566

SAP S/4HANA Cloud 管理员业务角色创建实战:基于 SAP_BR_ADMINISTRATOR 模板的一站式指南

摘要:SAP S/4HANA Cloud新系统初始登录时常见Fiori Launchpad无磁贴的问题,这是由于缺乏合适的业务角色分配。本文介绍了通过预交付的SAP_BR_ADMINISTRATOR模板创建管理员角色的完整流程,包括业务用户、业务角色和业务目录的核心概念解析。重点说明了直接使用模板的风险,并提供了从模板创建自定义管理员角色的详细步骤(4.1-4.3),以及权限限制设置的注意事项。文中还分享了一个实际项目案例,强调正确配置管理员角色对后续权限体系建设的关键作用。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 204

华为 MetaERP 总账模块依托 “交易即核算” 的事件驱动架构,与 Oracle EBS 相比,更强调业务事件自动触发财务动作、实时数据同步和智能规则引擎,实现业务与财务的深度融合

华为MetaERP总账模块采用"交易即核算"架构,相比Oracle EBS实现了三大突破:1)业务事件自动触发财务动作,如采购收货自动生成暂估凭证;2)业务财务数据实时同步,支持即时分析;3)内置智能规则引擎,实现自动匹配、核销和结转。该模块覆盖采购、销售、资产、薪酬等全业务场景,支持多维核算和关联交易自动抵消,显著提升核算效率与准确性。其中采购暂估、销售结转等场景实现全自动化处理,较EBS减少80%手工操作。

金牌架构师 225

螺旋矩阵,python实现

螺旋矩阵问题 给定一个n阶正方形矩阵,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。力扣原题 这个问题不涉及什么算法问题,考察的就是个人对于代码的掌控和抽象。 螺旋矩阵长的是这个样子 处理这个问题就得提到二分法中关于边界条件的规定,早处理二分法问题的时候,有个区间开闭原则,即左闭右闭 [left,right] 和 左闭右开 [left,right) [left,right] 此时 while left<= right 因为left==right

BigOrange的博客 6099

Windows 10 本地硬盘变成了可弹出磁盘

今天新装了系统, 电脑是一个SSD+HHD, 没想到装好之后右下角显示可安全删除设备, 两个硬盘在那里. 这还得了. 查了一下午, 大致知道了是什么问题. Standard SATA AHCI controller使用高性能的硬盘模式就会把硬盘看作是一个可热插拔的存储器, 所以自然就会显示可弹出. 如果你的BIOS支持关闭HotSwap或者HotPlug, 那么直接关闭就可以了. 或者你直接在BIOS里把磁盘模式改为IDE, 不过这样就发挥不好你SSD的高性能了. 还有一种解决方法, 就是手动让系统把这两个

落日之城 4万+

全部博文链接汇总(不断更新)

用python来解 PAT 1001 害死人不偿命的(3n+1)猜想-15-满分 用python来解 PAT 1002 写出这个数 -20-满分 用python来解PAT乙级1042 字符统计-20-满分 用python来解 PAT乙级 1022D进制的A+B -20-满分 用python来解 PAT 1048数字加密-20-满分无超时 用python来解 PAT 1050螺旋矩阵-25-满分无超时 用python来解 PAT 1060爱丁顿数-25-满分无超时 用python来解 PAT 1061判断题-

pythonuser1的博客 360

lwip-2.0.3

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

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

PAT 乙级 1050 螺旋矩阵 python

PAT 乙级 1050 螺旋矩阵 python 测试点7未通过

m0_43424109的博客 208

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

1050 螺旋矩阵 (25 分) python

这道题写了非常非常久,主要是不懂数组的基本方法。先输出一个基础数组,后续不断更改其中对应位置的数据,显得省力又轻松。而不是将list来回倒,左右添加元素。这道题第二个关键点是-循环,先输出外围,再输出次外围,以此类推,注意不断改变起始点的位置。注意内围里只有一个元素,一个竖行等个别特殊情况即可。先输出外围,再输出次外围。本来想用迭代的方法,但是数组在函数中的传递,显得并不轻松,不好处理。 import math a = int(input()) b = [int(i) for i in input().sp

Barthes0131的博客 231

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【PAT_Python解】1050 螺旋矩阵

多学习其他大佬的AC代码!

新时代先锋的博客 369

PAT-1050-螺旋矩阵(25)-源码+思路

让我嘚瑟一下,这题写的比井同学快一点2333[傲娇脸]嗯,拿到题目的时候本来想用python写的,毕竟可以动态地分配二维数组,但是想想题目限制只有150ms果断放弃了,拿起我的C++呀嘿哟嘿哟~~~老身是用偏数学的方法计算出要输出的矩阵的规律,不是固定地存储哟~也就是说我压根没用上二维数组-----------------------------------------啦啦啦,我是题目的分割线--...

qq_37502208的博客 402

1050 螺旋矩阵 (25 分)

1050 螺旋矩阵 (25 分) 本题要求将给定的 N 个正整数按非递增的顺序,填入“螺旋矩阵”。所谓“螺旋矩阵”,是指从左上角第 1 个格子开始,按顺时针螺旋方向填充。要求矩阵的规模为 m 行 n 列,满足条件:m×n 等于 N;m≥n;且 m−n 取所有可能值中的最小值。 输入格式: 输入在第 1 行中给出一个正整数 N,第 2 行给出 N 个待填充的正整数。所有数字不超过 104,相邻数字以空格分隔。 输出格式: 输出螺旋矩阵。每行 n 个数字,共 m 行。相邻数字以 1 个空格分隔,行末不得有多余空

GitHub:https://github.com/myp020301 666

PAT 1050 螺旋矩阵 (25 分)

#include <iostream> #include <algorithm> #include <vector> #include <cmath> using namespace std; bool cmp(int a,int b){ return b<a; } int main() { int N,temp,m,n,t=0; cin>>N; vector<int> a(N); for

m0_48711099的博客 178

PAT 1050 螺旋矩阵 python

1050 螺旋矩阵(25 分) 本题要求将给定的 N 个正整数按非递增的顺序,填入“螺旋矩阵”。所谓“螺旋矩阵”,是指从左上角第 1 个格子开始,按顺时针螺旋方向填充。要求矩阵的规模为 m 行 n 列,满足条件:m×n 等于 N;m≥n;且 m−n 取所有可能值中的最小值。 输入格式: 输入在第 1 行中给出一个正整数 N,第 2 行给出 N 个待填充的正整数。所有数字不超过 10​4​​,...

Raaay的博客 682

PAT----1050 螺旋矩阵(两种解法)

PAT(basic)–1050螺旋矩阵 文章目录PAT(basic)--1050螺旋矩阵题目描述输入格式输出格式输入样例输出样例目录 题目描述 本题要求将给定的 N 个正整数按非递增的顺序,填入“螺旋矩阵”。所谓“螺旋矩阵”,是指从左上角第 1 个格子开始,按顺时针螺旋方向填充。要求矩阵的规模为 m 行 n 列,满足条件:m×n 等于 N;m≥n;且 m−n 取所有可能值中的最小值。 输入格式 输入在第 1 行中给出一个正整数 N,第 2 行给出 N 个待填充的正整数。所有数字不超过 10^4,相邻数字以

qq_47534719的博客 1466

Python实现Pat 1050. String Subtraction (20)

题目Given two strings S1 and S2, S = S1 - S2 is defined to be the remaining string after taking all the characters in S2 from S1. Your task is simply to calculate S1 - S2 for any given strings. However,

期待一份好工作 426

PAT 1050 String Subtraction python解法

1050 String Subtraction (20 分) Given two strings S​1​​​ and S​2​​​ , S=S​​1​​​−S​​2​​​ is defined to be the remaining string after taking all the characters in S​​2​​​ from S​​1​​​ . Your task is si...

qq_36936510的博客 361

PAT乙级B1050 螺旋矩阵 (25 分)

本题要求将给定的 N 个正整数按非递增的顺序,填入“螺旋矩阵”。所谓“螺旋矩阵”,是指从左上角第 1 个格子开始,按顺时针螺旋方向填充。要求矩阵的规模为 m 行 n 列,满足条件:m×n 等于 N;m≥n;且 m−n 取所有可能值中的最小值。 输入格式: 输入在第 1 行中给出一个正整数 N,第 2 行给出 N 个待填充的正整数。所有数字不超过 10​4​​,相邻数字以空格分隔。 输出格式:...

vir_lee的博客 547

1050 螺旋矩阵(25 分)

一开始0246(偶数测试点)都对,1357都错。是因为没考虑像 N=5  也就是五行一列这样的情况。 之后,有个测试点N=3  数字只有三个的时候 一定得是 三行一列 而不是一行三列。(哈哈  我正好卡在3这个数字上,不得不说这个测试点真强) 最后,我的测试点一 显示答案错误: 后来发现是自己前面判断m 行n 列 的时候有了一点点的小问题。 我当时 N=21的时候错了(其实一般人不会遇到这个问...

(为大佬)递茶员 1782
上一篇: 用python来解 PAT 1048数字加密-20-满分无超时
下一篇: 用python来解 PAT 1060爱丁顿数-25-满分无超时
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值