二维数组(矩阵)之将矩阵旋转90度

将矩阵旋转90度:

题目描述:

例如将一个5*5的矩阵顺时针旋转90度:旋转前

1       2        3         4         5

6       7        8         9        10

11    12      13      14       15

16    17      18      19       20

21    22      23      24       25

选转后:

21     16      11       6        1

22     17      12       7        2

23     18      13       8        3

24     19      14       9        4

25     20      15      10      5

分析:如果N是偶数,则矩阵构成N/2圈;如果N是奇数,则矩阵构成(N-1)/2 圈;

将矩阵顺时针旋转90度,就是将每圈的元素在4个方位依次轮换位置:

交换元素的公式如下:

ai,j    ------------->aj,N-i+1

↑                             ↓

↑                             ↓

aN-j+1 ---------->aN-i+1,N-j+1

代码如下:

 1 /* */
 2 # include <iostream>
 3 # include <cstdio>
 4 # include <iomanip>
 5 using namespace std;
 6
 7 int main()
 8 {
 9     int a[20][20], i, j, p=1, t, n;
10     printf("请输入矩阵的阶:\n");
11     scanf("%d", &n);
12     printf("*******旋转前的矩阵*******\n");
13     for( i=1; i<=n; i++ )
14     {
15         for( j=1; j<=n; j++ )
16         {
17             a[i][j] = p++;
18             printf("%4d", a[i][j]);
19         }
20         printf("\n");
21     }
22     printf("*******顺时针旋转后的矩阵*******\n");
23     for( i=1; i<=n/2; i++ )
24     {
25         for( j=i; j<n-i+1; j++ )
26         {
27             t = a[i][j];
28             a[i][j] = a[n-j+1][i];
29             a[n-j+1][i] = a[n-i+1][n-j+1];
30             a[n-i+1][n-j+1] = a[j][n-i+1];
31             a[j][n-i+1] = t;
32         }
33     }
34     for( i=1; i<=n; i++ )
35     {
36         for( j=1; j<=n; j++ )
37         {
38             printf("%4d", a[i][j]);
39         }
40         printf("\n");
41     }
42     return 0;
43 }

原文地址:https://www.cnblogs.com/wsy107316/p/10705963.html

时间: 2024-12-15 01:47:38

二维数组(矩阵)之将矩阵旋转90度的相关文章

C语言——二维数组

二维数组 一.二维数组的定义 类型名 数组名[ 常量表达式1 ][ 常量表达式2 ] int a[2][2] 二维数组可以看成是矩阵(或表格),常量表达式1可以看成矩阵(表格)的行数,常量表达式2可以看成矩阵(表格)的列数. 二维数组可以看成一个一维数组a[0],a[1],数组中的元素又是一个个一维数组a[0][0],a[0][1]和a[1][0],a[1][1] 在内存中,二维数组站一系列连续的存储单元.存放的顺序是" 按行存放 " 二.二维数组的初始化 1.赋初值个数与数组元素个数

矩阵旋转(二维数组旋转)

给定一个 n × n 的二维矩阵表示一个图像. 将图像旋转 90 度.180度.270度. 示例 1: 给定 matrix = [ [1,2,3], [4,5,6], [7,8,9] ], 原地旋转输入矩阵,使其变为: [ [7,4,1], [8,5,2], [9,6,3] ] 示例 2: 给定 matrix = [ [ 5, 1, 9,11], [ 2, 4, 8,10], [13, 3, 6, 7], [15,14,12,16] ], 原地旋转输入矩阵,使其变为: [ [15,13, 2,

《两个二维数组(矩阵)相乘》

1 //两个二维数组相乘 2 #include<stdio.h> 3 #include<stdlib.h> 4 #define M 2 5 #define N 3 6 //#define P 6 7 void main() 8 { 9 int i,j,k; 10 //二维数组A和B求乘积,积放在数组C中 11 int A[M][N],B[N][M],C[M][M]; 12 //输入二维数组A的元素的值 13 printf("请输入矩阵A的元素:"); 14 fo

【c语言】二维数组中的查找,杨氏矩阵在一个二维数组中,每行都依照从左到右的递增的顺序排序,输入这种一个数组和一个数,推断数组中是否包括这个数

// 二维数组中的查找,杨氏矩阵在一个二维数组中.每行都依照从左到右的递增的顺序排序. // 每列都依照从上到下递增的顺序排序.请完毕一个函数,输入这种一个数组和一个数.推断数组中是否包括这个数 #include <stdio.h> #define col 4 #define rol 4 int yang(int(*p)[col], int num) { int i = 0; int j = col - 1; while (j+1) { int *q = &(p[i][j]); if

二维数组中的查找,杨氏矩阵

题目: 在一个二维数组中,每行都按照从左到右的递增的顺序排序.每列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个数组和一个数,判断数组中是否包含这个数. 例如: 二维数组 1 2 3 4 5 6 7 8 9 查找数字7. 题目分析: 算法一: 杨氏矩阵中的查找,可以看做是在二维数组中查找,定义一个二维数组,根据数组的基本特点,可以从数组中第一个元素逐行进行遍历,若数组的某个元素与所要找的数字相等,则能够找到这个数字.如果遍历完整个数组,都没有与之相等的元素,则找不到这个数字. 下面

任意定义一个二维数组,实现矩阵的转置——java

import java.util.Scanner; /* * 任意定义一个二维数组,编写程序实现矩阵的转置. * */ public class MatrixTransposition { public static void main(String[] args) { //create the rowNumber and columnNumber of the matrix Scanner input = new Scanner(System.in); System.out.println("

3月31号周二课堂练习:结对开发----求二维数组组成的矩阵中子矩阵的最大值二

一.题目要求 1.1输入一个二维整形数组,数组里有正数也有负数. 1.2二维数组首尾相接,象个一条首尾相接带子一样. 1.3数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 1.4求所有子数组的和的最大值.要求时间复杂度为O(n). 二.结对要求 2.1两人结对完成编程任务. 2.2一人主要负责程序分析,代码编程. 2.3一人负责代码复审和代码测试计划. 2.4发表一篇博客文章讲述两人合作中的过程.体会以及如何解决冲突(附结对开发的工作照). 三.设计过程 上次已经算过二维数组中

【C语言】二维数组中的查找,杨氏矩阵

//二维数组中的查找,杨氏矩阵 //在一个二维数组中,每行都按照从左到右的递增的顺序排序.每列都按照从上到下递增的顺序排序. //请完成一个函数,输入这样的一个数组和一个数,判断数组中是否包含这个数. #include <stdio.h> #define Col 4 int Yang(int arr[][Col], int val) { int i=0; int j = Col - 1; int tmp = arr[i][j]; //找到左上角的数 while (1) { if (tmp ==

C代码和python代码:用二维数组实现矩阵的转置

目录 一.总结 二.C代码 三.Python代码 一.总结 输入用了 int(input()) ,但发现这种方法好像有点不方便 每次输入一个数字都要按回车,按空格不能识别 下次找找看看有没有其他输入方法 Python中没有数组,但列表类似数组 通过叠加[ ],就可以通过列表创建二维数组 Python中创建二维数组的方法(以本案例为例): matrixA=[[0 for i in range(4)] for i in range(3)] matrixA=[ [ 0, 0, 0, 0], [ 0,