个人练习-PAT甲级-1105 Spiral Matrix

2023-10-17 22:18

本文主要是介绍个人练习-PAT甲级-1105 Spiral Matrix,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接https://pintia.cn/problem-sets/994805342720868352/problems/994805363117768704

题目大意,给出一串序列,要求将其按顺时针顺序填入一个m*n的矩阵中,其中m>nm-n最小。

简单题,只需要注意顺时针这个顺序即可。先求mn

    m = (int)(sqrt(1.0*N));while (N % m != 0) {m++;}n = N / m;if (m < n) {int tmp = m;m = n;n = tmp;}

pq表示下一个填入矩阵的位置,限定pq的上下限,用dir表示指针移动的方向。

    int p = 0, q = 0, pos = N-1, dir = 1;int pmin = 1, pmax = m-1, qmin = 0, qmax = n-1;while (pos != -1) {mat[p][q] = arr[pos--];if (dir == 1) {if (q < qmax) q++;else {qmax--; p++; dir = 2;}}else if (dir == 2) {if (p < pmax) p++;else {pmax--; q--; dir = 3;}}else if (dir == 3) {if (q > qmin) q--;else {qmin++; p--; dir = 4;}}else {if (p > pmin) p--;else {pmin++; q++; dir = 1;}}}

完整代码

#include <iostream>
#include <cstdio>
#include <cmath>
#include <vector>
#include <algorithm>
#include <queue>
#include <map>using namespace std;vector<int> arr;
int mat[102][102];
int N, m, n;int main() {scanf("%d", &N);arr.resize(N);for (int i = 0; i < N; i++) {scanf("%d", &arr[i]);}sort(arr.begin(), arr.end());m = (int)(sqrt(1.0*N));while (N % m != 0) {m++;}n = N / m;if (m < n) {int tmp = m;m = n;n = tmp;}int p = 0, q = 0, pos = N-1, dir = 1;int pmin = 1, pmax = m-1, qmin = 0, qmax = n-1;while (pos != -1) {mat[p][q] = arr[pos--];if (dir == 1) {if (q < qmax) q++;else {qmax--; p++; dir = 2;}}else if (dir == 2) {if (p < pmax) p++;else {pmax--; q--; dir = 3;}}else if (dir == 3) {if (q > qmin) q--;else {qmin++; p--; dir = 4;}}else {if (p > pmin) p--;else {pmin++; q++; dir = 1;}}}for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (j != 0)printf(" ");printf("%d", mat[i][j]);if (j == n-1)printf("\n");}}return 0;
}

这篇关于个人练习-PAT甲级-1105 Spiral Matrix的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/228296

相关文章

RabbitMQ练习(AMQP 0-9-1 Overview)

1、What is AMQP 0-9-1 AMQP 0-9-1(高级消息队列协议)是一种网络协议,它允许遵从该协议的客户端(Publisher或者Consumer)应用程序与遵从该协议的消息中间件代理(Broker,如RabbitMQ)进行通信。 AMQP 0-9-1模型的核心概念包括消息发布者(producers/publisher)、消息(messages)、交换机(exchanges)、

HomeBank:开源免费的个人财务管理软件

在个人财务管理领域,找到一个既免费又开源的解决方案并非易事。HomeBank&nbsp;正是这样一个项目,它不仅提供了强大的功能,还拥有一个活跃的社区,不断推动其发展和完善。 开源免费:HomeBank 是一个完全开源的项目,用户可以自由地使用、修改和分发。用户友好的界面:提供直观的图形用户界面,使得非技术用户也能轻松上手。数据导入支持:支持从 Quicken、Microsoft Money

【Rust练习】12.枚举

练习题来自:https://practice-zh.course.rs/compound-types/enum.html 1 // 修复错误enum Number {Zero,One,Two,}enum Number1 {Zero = 0,One,Two,}// C语言风格的枚举定义enum Number2 {Zero = 0.0,One = 1.0,Two = 2.0,}fn m

MySql 事务练习

事务(transaction) -- 事务 transaction-- 事务是一组操作的集合,是一个不可分割的工作单位,事务会将所有的操作作为一个整体一起向系统提交或撤销请求-- 事务的操作要么同时成功,要么同时失败-- MySql的事务默认是自动提交的,当执行一个DML语句,MySql会立即自动隐式提交事务-- 常见案例:银行转账-- 逻辑:A给B转账1000:1.查询

html css jquery选项卡 代码练习小项目

在学习 html 和 css jquery 结合使用的时候 做好是能尝试做一些简单的小功能,来提高自己的 逻辑能力,熟悉代码的编写语法 下面分享一段代码 使用html css jquery选项卡 代码练习 <div class="box"><dl class="tab"><dd class="active">手机</dd><dd>家电</dd><dd>服装</dd><dd>数码</dd><dd

分布式系统的个人理解小结

分布式系统:分的微小服务,以小而独立的业务为单位,形成子系统。 然后分布式系统中需要有统一的调用,形成大的聚合服务。 同时,微服务群,需要有交流(通讯,注册中心,同步,异步),有管理(监控,调度)。 对外服务,需要有控制的对外开发,安全网关。

Java IO 操作——个人理解

之前一直Java的IO操作一知半解。今天看到一个便文章觉得很有道理( 原文章),记录一下。 首先,理解Java的IO操作到底操作的什么内容,过程又是怎么样子。          数据来源的操作: 来源有文件,网络数据。使用File类和Sockets等。这里操作的是数据本身,1,0结构。    File file = new File("path");   字

[论文笔记]LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale

引言 今天带来第一篇量化论文LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale笔记。 为了简单,下文中以翻译的口吻记录,比如替换"作者"为"我们"。 大语言模型已被广泛采用,但推理时需要大量的GPU内存。我们开发了一种Int8矩阵乘法的过程,用于Transformer中的前馈和注意力投影层,这可以将推理所需

LeetCode 第414场周赛个人题解

目录 Q1. 将日期转换为二进制表示 原题链接 思路分析 AC代码 Q2. 范围内整数的最大得分 原题链接 思路分析 AC代码 Q3. 到达数组末尾的最大得分 原题链接 思路分析 AC代码 Q4. 吃掉所有兵需要的最多移动次数 原题链接 思路分析 AC代码 Q1. 将日期转换为二进制表示 原题链接 Q1. 将日期转换为二进制表示 思路分析

014.Python爬虫系列_解析练习

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈 PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈 Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈 优