1105 Spiral Matrix (25分)

MATLAB图像去噪实战:如何用巴特沃斯滤波器完美去除横条纹(附完整代码) 本文详细介绍了如何使用MATLAB中的巴特沃斯滤波器有效去除图像中的横条纹噪声。通过频域分析和滤波处理,结合完整的代码示例,帮助读者掌握从噪声分析到参数优化的全流程技术,实现高质量的图像去噪效果。 阅读详情

1105 Spiral Matrix (25分)
This time your job is to fill a sequence of N positive integers into a spiral matrix in non-increasing order. A spiral matrix is filled in from the first element at the upper-left corner, then move in a clockwise spiral. The matrix has m rows and n columns, where m and n satisfy the following: m×n must be equal to N; m≥n; and m−n is the minimum of all the possible values.

Input Specification:
Each input file contains one test case. For each case, the first line gives a positive integer N. Then the next line contains N positive integers to be filled into the spiral matrix. All the numbers are no more than 10^​4.The numbers in a line are separated by spaces.

Output Specification:
For each test case, output the resulting matrix in m lines, each contains n numbers. There must be exactly 1 space between two adjacent numbers, and no extra space at the end of each line.

Sample Input:
12
37 76 20 98 76 42 53 95 60 81 58 93

Sample Output:
98 95 93
42 37 81
53 20 76
58 60 76

基本思路:使用二维数组按照一定顺序存储各个元素,最后以行为单位进行输出。

这道题有两个关键点:
1、找到合适的m和n。
2、循环赋值。

先来看第一点,假设数据长度为N。要找到m-n最小且m>=n,那么可以利用一个从1开始的循环(用i计数),用N-i减去i,得到的结果取绝对值,选取绝对值最小的N-i 与 i 作为m 与 n 并根据大小关系分别赋值给m,n即可。

for(int i=1;i<=(int)sqrt(N);i++){
		if(N%i == 0){
			if(abs(N/i-i)<min){
				min = N/i-i;
				m = i>N/i?i:N/i;
				n = i>N/i?N/i:i;
			}
		}
	}

要注意,i的上界可以取到sqrt(N),避免重复计算。

说完第一点,再来看最关键的第二点:循环赋值问题。
刚开始接触这种题,看到我就头大,觉得很困难,无从下手。(类似的还有1109 Group Photo ),但是其实这种题是表面上难,写起来很简单,不相信的话我们继续往下看。
本题要求我们要顺时针赋值,那么我们就把这个赋值拆解开:拆为赋值几圈,每一圈分为上-右-下-左赋值,这样我们只用关注如何选取每个赋值循环的计数变量(如i,j)的上下界取值即可。赋值的圈数要根据元素数目来定,不需要人为的确认上界。

i为圈数(从0开始),j为每个赋值循环的计数变量。

while(cnt<N){
		for(int j=i;j<n-i && cnt<N;j++){
			G[i][j] = l[cnt++];
		}
		for(int j=i+1;j<m-i && cnt<N;j++){
			G[j][n-1-i] = l[cnt++];
		}
		for(int j=n-i-2;j>=i && cnt<N;j--){
			G[m-1-i][j] = l[cnt++];
		}
		for(int j=m-2-i;j>=i+1 && cnt<N;j--){
			G[j][i] = l[cnt++];
		}
		i++;
	}

我们以m=4,n=3来说明整个赋值过程:
第一圈(i=0)
对上方元素的赋值,是行为0,列从0到2。(行为i,列为【i,n-1-i】)
对右边元素的赋值,是行从1到3,列为2。(行为【i+1,m-1】列为n-1-i)
对下方元素的赋值,是行为3,列从1到0。(行为m-i,列为【n-i-2,i】)
对左边元素的赋值,是行从2到1,列为0。(行为【m-2-i,i+1】,列为i)

从这一圈分析,我们可以通过行列变化具体的数值来确定每一次赋值的上下界怎么取,由此我们便可以很容易的解决掉本题。

完整代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn = 10010;
int l[maxn];

int main(){
	int N;
	scanf("%d",&N);
	for(int i=0;i<N;i++){
		scanf("%d",&l[i]);
	}
	int min = 0x7FFFFFFF;
	int m,n;
	for(int i=1;i<=(int)sqrt(N);i++){
		if(N%i == 0){
			if(abs(N/i-i)<min){
				min = N/i-i;
				m = i>N/i?i:N/i;
				n = i>N/i?N/i:i;
			}
		}
	}
	int G[m][n];
	int i=0,cnt=0;
	sort(l,l+N,greater<int>());
	while(cnt<N){
		for(int j=i;j<n-i && cnt<N;j++){
			G[i][j] = l[cnt++];
		}
		for(int j=i+1;j<m-i && cnt<N;j++){
			G[j][n-1-i] = l[cnt++];
		}
		for(int j=n-i-2;j>=i && cnt<N;j--){
			G[m-1-i][j] = l[cnt++];
		}
		for(int j=m-2-i;j>=i+1 && cnt<N;j--){
			G[j][i] = l[cnt++];
		}
		i++;
	}
	for(int i=0;i<m;i++){
		for(int j=0;j<n;j++){
			printf("%d",G[i][j]);
			if(j<n-1)printf(" ");
		}
		printf("\n");
	}
	
	return 0;
}
FPGA入门200例(17):如何阅读RTL原理图(Schematic)?将Verilog代码与门级电路对应 本文针对FPGA开发新手常见误区,重点讲解了RTL原理图的重要性和阅读方法。文章指出,仅通过仿真验证代码会导致板级测试异常,而RTL原理图能直观呈现Verilog代码对应的硬件结构(门电路、寄存器、多路选择器等)。通过"识别基础元件→跟踪信号路径→验证逻辑关系"的三步法,新手可以建立代码与硬件的映射思维,排查冗余逻辑、意外锁存器等错误。文章还结合Vivado/Quartus工具操作指南和典型代码案例,帮助读者掌握从代码到硬件实现的转换过程,避免混淆RTL与门级原理图、忽略信号位宽等常见误 阅读详情

相关推荐

深信服AF设置安全防护策略

防火墙设置安全防护策略,禁止用户访问指定网站

m0_64423407的博客 4836

浙江大学 计算机与软件学院 2019年保研 上机 模拟练习 7-2 Zigzag Sequence(25分)

This time your job is to output a sequence of N positive integers in a zigzag format with width M in non-decreasing order. A zigzag format is to fill in the first row with M numbers from left to right...

qq_29989357的博客 356

LabVIEW实战:基于DAQmx的实时正弦波生成、采集与波形图动态显示

本文详细介绍了如何使用LabVIEW和DAQmx驱动实现实时正弦波的生成、采集与动态显示。通过USB-6008数据采集卡,结合队列缓冲机制和动态波形图显示技术,构建了一个完整的信号处理系统。文章包含硬件连接、软件配置、任务设置及常见问题排查,适合LabVIEW初学者和硬件控制开发者参考。

weixin_30872337的博客 124

PAT甲1105 Spiral Matrix

题意 将数列转成螺旋矩阵 题解 核心思想大概是走一步是否越界,越界就回退改方向,然后再走一步 有一个问题很奇怪 为什么我把if注释掉,反而会变快呢? 如果我把if注释掉,那应该是走一步,越界就回退改方向,然后再向前走一步,如果不越界,回退不改方向再向前一步,相当于无用功 大概计组没有学好 哭唧唧 源码 #include<cstring> #include<cmath> ...

Chauncey_Yu的博客 263

手把手教你用UC3842搭建12V/5A反激电源(附PSIM仿真文件)

本文详细介绍了基于UC3842的12V/5A反激电源设计与PSIM仿真实践。从UC3842芯片选型、高频变压器计算到PSIM仿真模型搭建,提供完整的开关电源设计流程。特别包含PCB布局要点和实测优化建议,帮助工程师快速掌握反激电源开发技巧。

u6v7w8x的博客 1202

关于对鱼眼相机图片进行畸变校正的两种思路

鱼眼畸变主要表现为径向畸变(Radial Distortion),图像中心正常,边缘向外拉伸。畸变模型通常基于入射角θ\thetaθ(光线与光学轴夹角)和图像半径rrr的关系。等距投影(Equidistant Projection)rdfθrd​fθ,其中rdr_drd​为畸变图像半径,fff为焦距,θ\thetaθ为入射角。等立体角投影(Equisolid Angle Projection)rd2fsin⁡θ2rd​2fsinθ/2。

qq_45670407的博客 1546

1105 Spiral Matrix (25分) 螺旋矩阵模拟题

This time your job is to fill a sequence of N positive integers into a spiral matrix in non-increasing order. A spiral matrix is filled in from the first element at the upper-left corner, then move in a clockwise spiral. The matrix has m rows and n columns

qq_40249197的博客 345

从零构建物联网监控系统:STM32+迪文屏+WiFi模组的实战解析

本文详细解析了基于STM32微控制器、迪文串口屏和WiFi模组构建物联网监控系统的完整方案。从硬件选型、系统架构设计到数据交互实现,提供了包括迪文屏GUI开发、STM32通信协议、低功耗优化等实战经验,帮助开发者快速掌握物联网监控系统的核心技术。

docker7nomad的博客 728

PAT甲级 1105 Spiral Matrix (25 分)模拟

1105 Spiral Matrix (25 分) This time your job is to fill a sequence of N positive integers into a spiral matrix in non-increasing order. A spiral matrix is filled in from the first element at the uppe...

qq_29762941的博客 268

北斗导航:提高RTK定位精度的GIS应用

其中,RTK(Real-Time Kinematic)定位技术是一种实时差分定位技术,通过利用基准站的观测数据来对移动站的测量值进行差分处理,以提高定位精度。差分处理的关键是基准站的观测数据,基准站通过全球定位系统(如北斗导航系统)获取卫星信号并记录观测数据。通过使用RTK定位技术,结合北斗导航系统的观测数据和差分处理,可以实现高精度的定位结果。我们将介绍RTK定位的原理、使用北斗导航系统进行RTK定位的步骤,以及如何将定位结果与GIS数据进行集成和可视化展示。步骤1:设置基准站和移动站。

OvzStream的博客 476

OpenOCD入门到精通:第 1 章 OpenOCD 概述

OpenOCD是一款开源的片上调试工具,支持60+调试适配器和8大处理器架构。它提供三大核心功能:片上调试、在系统编程和边界扫描测试。作为嵌入式开发工具链的中间桥梁,OpenOCD连接上层IDE/GDB与底层硬件,采用分层架构设计实现硬件兼容性。其配置基于Tcl脚本语言,支持网络服务接口,广泛应用于ARM、RISC-V等芯片的调试与烧录场景。

从事嵌入式linux android驱动开发,拥有全栈能力 1399

PAT甲级真题 1105 Spiral Matrix (25分) C++实现(画螺旋矩阵)

题目 This time your job is to fill a sequence of N positive integers into a spiral matrix in non-increasing order. A spiral matrix is filled in from the first element at the upper-left corner, then move in a clockwise spiral. The matrix has m rows and n col

zhang35的博客 316

如何用matlab扫频法测考虑频率耦合的并网逆变器的序阻抗,如何实现?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 1193

1105 Spiral Matrix (25 分)

题目来源:PAT (Advanced Level) Practice This time your job is to fill a sequence of N positive integers into a spiral matrix in non-increasing order. A spiral matrix is filled in from the first element at the upper-left corner, then move in a clockwise spiral.

weixin_51032998的博客 389

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

模拟_1105 Spiral Matrix (25 分)

目录 1105 Spiral Matrix 题目描述 解题思路 程序  1105 Spiral Matrix 题目描述 This time your job is to fill a sequence of N positive integers into a spiral matrix in non-increasing order. A spiral matrix is fill...

A_Bo的博客 963

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

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

1105 Spiral Matrix (25 分)

This time your job is to fill a sequence of N positive integers into a spiral matrix in non-increasing order. A spiral matrix is filled in from the first element at the upper-left corner, then move in...

_Gray 262

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

甲级1105 Spiral Matrix (25 分)

1105 Spiral Matrix (25 分) This time your job is to fill a sequence of N positive integers into a spiral matrix in non-increasing order. A spiral matrix is filled in from the first element at the upper...

weixin_44751612的博客 369

A1105 Spiral Matrix (25 分)

这个题目自己的想法是螺旋输入mat数组,举例来说,在输入完第一趟外层,停在第二层的起点,然后再循环,虽然结果正确,但是时间长的吓人。。。对算法理解还是不深,不明白为什么和这种停在内层第一个位置的时间复杂度相差的时间这么久 #include&lt;cstdio&gt; #include&lt;cmath&gt; #include&lt;algorithm&gt; using namespace st...

A_Aria的博客 303
上一篇: 1125 Chain the Ropes (25分)
下一篇: 1007 Maximum Subsequence Sum (25分)
一颗橡树
博客等级 码龄8年 23粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值