【C语言刷题】可能难住过你的三道有趣打印题 | 您所在的位置:网站首页 › 打印蛇形矩阵 › 【C语言刷题】可能难住过你的三道有趣打印题 |
目录
前言回型矩阵题目描述问题分析代码实现
蛇形矩阵题目描述问题分析代码实现
Z字形转换题目描述问题分析代码实现
小尾巴
前言
这三道题目均来自牛客网或力扣。 本文用图解的方式,以最简单的思路带你手把手解决这三个问题,但更重要的是要学会举一反三。 当然,三个题的解法肯定都不唯一,我这里给出来的解法可能并不是最优,只是以相对简单清晰的思路去分析问题,所以没有考虑复杂度的问题。 回型矩阵 题目描述先看一张图: 由内而外,先填外圈后填内圈,所以把填一圈抽象成一个大循环,每一个大循环又包含了四个小循环,每个小循环分别填一条边。 所以只需写出每个循环即可解决问题。 两种矩阵还有不同点: 对于 n 为偶数的情况,走完整数次大循环即可填满整个矩阵。 而对 n 为奇数的情况,走完整数次大循环之后会空下中间一个位置。 这个问题可以通过动态边界来解决: 定义两个边界 min 和 max ,没走完一次大循环让 min++, max–; 如果 n 为偶数,经过整数次大循环之后 min > max , 如果 n 为奇数,经过整数次大循环之后 min = max 。 所以可以利用这一点加个判断条件填上中间那个元素。 代码实现 int main() { int n = 0; scanf("%d", &n); int i, j; //根据输入值n分配一块空间给二维数组 int** arr = malloc(sizeof(int*) * n); for (i = 0; i |
CopyRight 2018-2019 实验室设备网 版权所有 |