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

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

相关文章

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

C++中实现调试日志输出

《C++中实现调试日志输出》在C++编程中,调试日志对于定位问题和优化代码至关重要,本文将介绍几种常用的调试日志输出方法,并教你如何在日志中添加时间戳,希望对大家有所帮助... 目录1. 使用 #ifdef _DEBUG 宏2. 加入时间戳:精确到毫秒3.Windows 和 MFC 中的调试日志方法MFC

Python使用Colorama库美化终端输出的操作示例

《Python使用Colorama库美化终端输出的操作示例》在开发命令行工具或调试程序时,我们可能会希望通过颜色来区分重要信息,比如警告、错误、提示等,而Colorama是一个简单易用的Python库... 目录python Colorama 库详解:终端输出美化的神器1. Colorama 是什么?2.

Servlet中配置和使用过滤器的步骤记录

《Servlet中配置和使用过滤器的步骤记录》:本文主要介绍在Servlet中配置和使用过滤器的方法,包括创建过滤器类、配置过滤器以及在Web应用中使用过滤器等步骤,文中通过代码介绍的非常详细,需... 目录创建过滤器类配置过滤器使用过滤器总结在Servlet中配置和使用过滤器主要包括创建过滤器类、配置过滤

正则表达式高级应用与性能优化记录

《正则表达式高级应用与性能优化记录》本文介绍了正则表达式的高级应用和性能优化技巧,包括文本拆分、合并、XML/HTML解析、数据分析、以及性能优化方法,通过这些技巧,可以更高效地利用正则表达式进行复杂... 目录第6章:正则表达式的高级应用6.1 模式匹配与文本处理6.1.1 文本拆分6.1.2 文本合并6

python与QT联合的详细步骤记录

《python与QT联合的详细步骤记录》:本文主要介绍python与QT联合的详细步骤,文章还展示了如何在Python中调用QT的.ui文件来实现GUI界面,并介绍了多窗口的应用,文中通过代码介绍... 目录一、文章简介二、安装pyqt5三、GUI页面设计四、python的使用python文件创建pytho

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06