逆时针填充矩阵

2023-10-22 13:11
文章标签 矩阵 填充 逆时针

本文主要是介绍逆时针填充矩阵,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

逆时针将矩阵填充

问题描述

编程实现自动填充nxn矩阵阵元素数值,填充规则为:从第一行最后一列矩阵元素开始按逆时针方向螺旋式填充数值1, 2,…,nXn,其中:n从键盘输入且3≤n≤20.最后向显示器输出该矩阵所有元素。

输入形式

输入一个正整数,为矩阵的行数和列数

输出形式

按行列顺序输出nXn矩阵的所有元素。
(1)每行n列矩阵元素均需在一行内输出显示
(2)输出每行矩阵元素后均需换行输出下一行,共输出n行
(3)每个矩阵元素数值的域宽均为4位且右对齐

样例输入

11

样例输出

11 10 9 8 7 6 5 4 3 2 1
12 49 48 47 46 45 44 43 42 41 40
13 50 79 78 77 76 75 74 73 72 39
14 51 80 101 100 99 98 97 96 71 38
15 52 81 102 115 114 113 112 95 70 37
16 53 82 103 116 121 120 111 9469 36
17 54 83 104 117 118 119 110 93 68 35 
18 55 84 105 106 107 108 109 92 67 34
19 56 85 86 87 88 89 90 91 66 33
20 57 58 59 60 61 62 63 64 65 32
21 22 23 24 25 26 27 28 29 30 31

算法逻辑实现

通过对题目的分析,我们可以知道,当给一个n时,其顺序将是个逆时针顺序

n...................................1
...................................n+n-1+n-1+n-2
...................................
....................................
.......................................
........................................
..........................................
.......................................
.......................................
........................................
n+n-1................................n+n-1+n-1

由此我们可以看到,矩阵中转弯的数据具有一定的规律性,可以将其放入数组中即

[n,n-1,n-1,n-2,n-2,…,1,1]

同时二维数组的坐标可以看成下x,y坐标,对于下标的操作可以总结成为四种行为,向上,向下,向左,向右,其代表不同的坐标操作。

代码实现过程

#include <stdio.h>int main() {int num, i;int k = 0, j = 0;int arr[20][20];scanf("%d", &num);int tempnum = num - 1;int numarr[2 * num];numarr[1] = num;//定义需要翻转的数目for (i = 2; i < 2 * num - 1; i = i + 2) {numarr[i] = tempnum;numarr[i + 1] = tempnum;tempnum--;}//定义坐标数组,向左,向左,向右,向上int direction[4][2] = { {0, -1}, {1, 0}, {0, 1}, {-1, 0} };//定义当前位置的坐标int x = 0;int y = num;int numIndex = 1;if (num >= 3 && num <= 20) {for (i = 1; i <= num * num; i++) {//每次更新x和y的坐标x = direction[j % 4][0] + x;y = direction[j % 4][1] + y;arr[x][y] = i;//判断何时进行转向k++;//当k等于需要转向的数据时,更新jif (k == numarr[numIndex]) {numIndex++;k = 0;j++;}}//将数组的值打印出来for (i = 0; i < num; i++) {for (j = 0; j < num; j++) {printf("%4d", arr[i][j]);
//				printf(" ");}printf("\n");}} else {printf("Please input number between 3 to 20\n");}
}

效果演示过程

在这里插入图片描述

这篇关于逆时针填充矩阵的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

hdu 4565 推倒公式+矩阵快速幂

题意 求下式的值: Sn=⌈ (a+b√)n⌉%m S_n = \lceil\ (a + \sqrt{b}) ^ n \rceil\% m 其中: 0<a,m<215 0< a, m < 2^{15} 0<b,n<231 0 < b, n < 2^{31} (a−1)2<b<a2 (a-1)^2< b < a^2 解析 令: An=(a+b√)n A_n = (a +

hdu 6198 dfs枚举找规律+矩阵乘法

number number number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description We define a sequence  F : ⋅   F0=0,F1=1 ; ⋅   Fn=Fn

线性代数|机器学习-P35距离矩阵和普鲁克问题

文章目录 1. 距离矩阵2. 正交普鲁克问题3. 实例说明 1. 距离矩阵 假设有三个点 x 1 , x 2 , x 3 x_1,x_2,x_3 x1​,x2​,x3​,三个点距离如下: ∣ ∣ x 1 − x 2 ∣ ∣ 2 = 1 , ∣ ∣ x 2 − x 3 ∣ ∣ 2 = 1 , ∣ ∣ x 1 − x 3 ∣ ∣ 2 = 6 \begin{equation} ||x

渐变颜色填充

GradientFill函数可以对特定的矩形区域或者三角形区域进行渐变颜色的填充。我们先来看看GradientFill函数到底长得什么样子,帅不帅。 [cpp]  view plain copy print ? BOOL GradientFill(     _In_  HDC hdc,     _In_  PTRIVERTEX pVertex,     _In_  ULONG

【Godot4.3】多边形的斜线填充效果基础实现

概述 图案(Pattern)填充是一个非常常见的效果。其中又以斜线填充最为简单。本篇就探讨在Godot4.3中如何使用Geometry2D和CanvasItem的绘图函数实现斜线填充效果。 基础思路 Geometry2D类提供了多边形和多边形以及多边形与折线的布尔运算。按照自然的思路,多边形的斜线填充应该属于“多边形与折线的布尔运算”范畴。 第一个问题是如何获得斜线,这条斜线应该满足什么样

【线性代数】正定矩阵,二次型函数

本文主要介绍正定矩阵,二次型函数,及其相关的解析证明过程和各个过程的可视化几何解释(深蓝色字体)。 非常喜欢清华大学张颢老师说过的一段话:如果你不能用可视化的方式看到事情的结果,那么你就很难对这个事情有认知,认知就是直觉,解析的东西可以让你理解,但未必能让你形成直觉,因为他太反直觉了。 正定矩阵 定义 给定一个大小为 n×n 的实对称矩阵 A ,若对于任意长度为 n 的非零向量 ,有 恒成

python科学计算:NumPy 线性代数与矩阵操作

1 NumPy 中的矩阵与数组 在 NumPy 中,矩阵实际上是一种特殊的二维数组,因此几乎所有数组的操作都可以应用到矩阵上。不过,矩阵运算与一般的数组运算存在一定的区别,尤其是在点积、乘法等操作中。 1.1 创建矩阵 矩阵可以通过 NumPy 的 array() 函数创建。矩阵的形状可以通过 shape 属性来访问。 import numpy as np# 创建一个 2x3 矩阵mat

【UVA】10003-Cutting Sticks(动态规划、矩阵链乘)

一道动态规划题,不过似乎可以用回溯水过去,回溯的话效率很烂的。 13988658 10003 Cutting Sticks Accepted C++ 1.882 2014-08-04 09:26:49 AC代码: #include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include

算法练习题17——leetcode54螺旋矩阵

题目描述 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。  代码 import java.util.*;class Solution {public List<Integer> spiralOrder(int[][] matrix) {// 用于存储螺旋顺序遍历的结果List<Integer> result = new ArrayList

线性代数 第六讲 特征值和特征向量_相似对角化_实对称矩阵_重点题型总结详细解析

文章目录 1.特征值和特征向量1.1 特征值和特征向量的定义1.2 特征值和特征向量的求法1.3 特征值特征向量的主要结论 2.相似2.1 相似的定义2.2 相似的性质2.3 相似的结论 3.相似对角化4.实对称矩阵4.1 实对称矩阵的基本性质4.2 施密特正交化 5.重难点题型总结5.1 判断矩阵能否相似对角化5.2 已知两个矩阵相似,求某个矩阵中的未知参数5.3 相似时,求可逆矩阵P,使