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

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

相关文章

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

java -jar example.jar 产生的日志输出到指定文件的方法

《java-jarexample.jar产生的日志输出到指定文件的方法》这篇文章给大家介绍java-jarexample.jar产生的日志输出到指定文件的方法,本文给大家介绍的非常详细,对大家的... 目录怎么让 Java -jar example.jar 产生的日志输出到指定文件一、方法1:使用重定向1、

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

基于Spring Boot 的小区人脸识别与出入记录管理系统功能

《基于SpringBoot的小区人脸识别与出入记录管理系统功能》文章介绍基于SpringBoot框架与百度AI人脸识别API的小区出入管理系统,实现自动识别、记录及查询功能,涵盖技术选型、数据模型... 目录系统功能概述技术栈选择核心依赖配置数据模型设计出入记录实体类出入记录查询表单出入记录 VO 类(用于

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

Zabbix在MySQL性能监控方面的运用及最佳实践记录

《Zabbix在MySQL性能监控方面的运用及最佳实践记录》Zabbix通过自定义脚本和内置模板监控MySQL核心指标(连接、查询、资源、复制),支持自动发现多实例及告警通知,结合可视化仪表盘,可有效... 目录一、核心监控指标及配置1. 关键监控指标示例2. 配置方法二、自动发现与多实例管理1. 实践步骤

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

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

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

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