学习记录—矩阵螺旋输出(有点崩溃,还好出结果了)

2024-01-29 05:08

本文主要是介绍学习记录—矩阵螺旋输出(有点崩溃,还好出结果了),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 一、题目
  • 二、输入输出格式
  • 三、实现
  • 四、思路


要不说菜呢,这个程序写了三小时,写不出来,一个人在这死磕,因为我觉得我这个思路可以。
过程有点崩溃。。。


一、题目

给定一个 m 行、n 列的矩阵,请按照顺时针螺旋的顺序输出矩阵中所有的元素(从[0][0]位置开始,具体请参见下图)。

在这里插入图片描述
时间限制:1000ms
内存限制:32768k


二、输入输出格式

输入格式

第一行输入 2 个整数,分别对应题目描述中的 m 和 n(1≤m,n≤100)之间用一个空格分隔。接下来输入 m 行,每行包含 n 个整数(-10000≤a,b,c≤10000),每两个整数之间用一个空格分隔。

输出格式

输出为一行,包括 m×n 个整数,按照题目要求的顺序依次输出所有矩阵元素,任意两个整数之间用一个空格分隔,最后一个整数后面没有空格。


输入样例 1

2 3
1 2 3
3 4 6

输出样例 1

1 2 3 6 4 3


输入样例 2

3 2
1 2
3 4
5 6

输出样例 2

1 2 4 6 5 3


三、实现

第一版

#include <stdio.h>int main() {int matrix[100][100];int m;int n;int space = 0;int h_min, h_max, v_min, v_max, h, v;scanf("%d %d", &m, &n);h_min = v_min = h = v = 0;h_max = m - 1;                   //最大行v_max = n - 1;                   //最大列for (int i = 0; i < m; i++){for (int j = 0; j < n; j++){scanf("%d", &matrix[i][j]);}}if (m == 1){for (int i = 0; i < n; i++){i == 0 || printf(" ");printf("%d", matrix[0][i]);}return 0;}if (n == 1){for (int i = 0; i < m; i++){i == 0 || printf(" ");printf("%d", matrix[i][0]);}return 0;}while (1)  //{if (h_min == h)     //向右{   if(v_min == v){for (int j = 0; j < (v_max - v_min + 1); j++){printf("%d", matrix[h_min][v_min + j]);if (space == m * n){ break;}else {printf(" ");++space;}}//h_min++;v = v_max;h = ++h_min;}if (v == v_max)     //向下{for (int j = 0; j < (h_max - h_min + 1); j++){printf("%d", matrix[h_min + j][v_max]);if (space == m * n){ break;}else {printf(" ");++space;}}//v_max--;h = h_max;v = --v_max;} }if (h == h_max)     //向左{if(v == v_max){for (int j = 0; j < (v_max - v_min + 1); j++){printf("%d", matrix[h_max][v_max - j]);if (space == m * n){ break;}else {printf(" ");++space;}}//h_max--;h = --h_max;v = v_min;}if (v == v_min)     //向上{for (int j = 0; j < (h_max - h_min + 1); j++){printf("%d", matrix[h_max - j][v_min]);if (space == m * n){ break;}else {printf(" ");++space;}}//v_min++;h = h_min;v = ++v_min;}}}return 0;
}

没通过,原因超时时间限制
然后死磕。。。。。。


最后成功通过代码

#include <stdio.h>int main() {int matrix[100][100];int m;int n;int space = 0;int h_min, h_max, v_min, v_max, h, v;scanf("%d %d", &m, &n);h_min = v_min = h = v = 0;h_max = m - 1;                   //最大行v_max = n - 1;                   //最大列for (int i = 0; i < m; i++){for (int j = 0; j < n; j++){scanf("%d", &matrix[i][j]);}}while ((h_min <= h_max) && (v_min <= v_max))  //{//向右for (int j = 0; j < (v_max - v_min); j++){printf("%d", matrix[h_min][v_min + j]);space++;if (space == m * n){ break;}else {printf(" ");}}//向下for (int j = 0; j < (h_max - h_min); j++){printf("%d", matrix[h_min + j][v_max]);space++;if (space == m * n){ break;}else {printf(" ");}}//向左for (int j = 0; j < (v_max - v_min); j++){printf("%d", matrix[h_max][v_max - j]);space++;if (space == m * n){ break;}else {printf(" ");}}//向上for (int j = 0; j < (h_max - h_min); j++){printf("%d", matrix[h_max - j][v_min]);space++;if (space == m * n){ break;}else {printf(" ");}}h_min += 1;h_max -= 1;v_min += 1;v_max -= 1;}return 0;
}

四、思路

在这里插入图片描述

1、设置四个变量:
h_min , h_max , v_min , v_max(未输出矩阵横hv坐标最大最小值)
2、每次循环输出一层元素,向右->向下->向左->向上
3、循环结束用横竖坐标判断,如果横坐标最小值和竖坐标最小值都小于等于最大值,循环条件则为
2、每次输出最外层的元素,重新调整四个变量为未输出矩阵的横竖坐标最大最小值


这篇关于学习记录—矩阵螺旋输出(有点崩溃,还好出结果了)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

在Linux中改变echo输出颜色的实现方法

《在Linux中改变echo输出颜色的实现方法》在Linux系统的命令行环境下,为了使输出信息更加清晰、突出,便于用户快速识别和区分不同类型的信息,常常需要改变echo命令的输出颜色,所以本文给大家介... 目python录在linux中改变echo输出颜色的方法技术背景实现步骤使用ANSI转义码使用tpu

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

Python UV安装、升级、卸载详细步骤记录

《PythonUV安装、升级、卸载详细步骤记录》:本文主要介绍PythonUV安装、升级、卸载的详细步骤,uv是Astral推出的下一代Python包与项目管理器,主打单一可执行文件、极致性能... 目录安装检查升级设置自动补全卸载UV 命令总结 官方文档详见:https://docs.astral.sh/

统一返回JsonResult踩坑的记录

《统一返回JsonResult踩坑的记录》:本文主要介绍统一返回JsonResult踩坑的记录,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录统一返回jsonResult踩坑定义了一个统一返回类在使用时,JsonResult没有get/set方法时响应总结统一返回

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

java对接海康摄像头的完整步骤记录

《java对接海康摄像头的完整步骤记录》在Java中调用海康威视摄像头通常需要使用海康威视提供的SDK,下面这篇文章主要给大家介绍了关于java对接海康摄像头的完整步骤,文中通过代码介绍的非常详细,需... 目录一、开发环境准备二、实现Java调用设备接口(一)加载动态链接库(二)结构体、接口重定义1.类型

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

C/C++中OpenCV 矩阵运算的实现

《C/C++中OpenCV矩阵运算的实现》本文主要介绍了C/C++中OpenCV矩阵运算的实现,包括基本算术运算(标量与矩阵)、矩阵乘法、转置、逆矩阵、行列式、迹、范数等操作,感兴趣的可以了解一下... 目录矩阵的创建与初始化创建矩阵访问矩阵元素基本的算术运算 ➕➖✖️➗矩阵与标量运算矩阵与矩阵运算 (逐元