zoukankan      html  css  js  c++  java
  • C++ 方阵原地旋转90度

    不额外申请内存(另外的一个二维数组空间),将一个方阵(二维数组)原地旋转90度,主要的思路是,由外向内,一圈圈的进行旋转(就是依次进行交换),如下图所示,当这些圈圈都交换完了之后,就完成了原地旋转了。

    代码如下: 

     1 #include <time.h>
     2 #include <stdlib.h>
     3 #include <iostream>
     4 using namespace std;
     5 #define MIN 0
     6 #define MAX 9
     7 
     8 
     9 void rotate(int **matrix, int size);
    10 void new_matrix(int ** matrix, int size);
    11 void delete_matrix(int ** matrix, int size);
    12 void rand_matrix(int ** matrix, int size);
    13 void print_matrix(int ** matrix, int size);
    14 int main() {
    15 
    16     int size = 5;
    17     int **matrix = new int *[size];
    18     new_matrix(matrix, size);
    19     srand((unsigned)(time(0)));
    20     rand_matrix(matrix, size);
    21     print_matrix(matrix, size);
    22     cout << "***************" << endl;
    23     rotate(matrix, size);
    24     print_matrix(matrix, size);
    25     delete_matrix(matrix, size);
    26     delete []matrix;
    27     getchar();
    28     getchar();
    29     return 0;
    30 }
    31 void rotate(int **matrix, int size)
    32 {
    33     int temp;
    34     for (int i = 0; i < size / 2; i++)
    35     {
    36         int first = i;
    37         int last = size - 1 - i;
    38         for (int j = first; j < last; j++)
    39         {
    40             int offset = size - 1 - j;
    41             int temp = matrix[j][i];
    42             matrix[j][i] = matrix[last][j];
    43             matrix[last][j] = matrix[offset][last];
    44             matrix[offset][last] = matrix[i][offset];
    45             matrix[i][offset] = temp;
    46         }
    47     }
    48 }
    49 void new_matrix(int ** matrix, int size)
    50 {
    51     for (int i = 0; i < size; i ++)
    52     {
    53         matrix[i] = new int[size];
    54     }
    55 }
    56 void delete_matrix(int ** matrix, int size)
    57 {
    58     for (int i = 0; i < size; i ++)
    59     {
    60         delete[] matrix[i];
    61     }
    62 }
    63 void rand_matrix(int ** matrix, int size)
    64 {
    65     for (int i = 0; i < size; i ++)
    66     {
    67         for (int j = 0; j < size; j ++)
    68         {
    69             matrix[i][j] = MIN + rand() % (MAX - MIN + 1);
    70         }
    71         
    72     }
    73 }
    74 void print_matrix(int ** matrix, int size)
    75 {
    76     for (int i = 0; i < size; i ++)
    77     {
    78         for (int j = 0; j < size; j ++)
    79         {
    80             cout << " " << matrix[i][j];
    81         }
    82         cout << endl;
    83     }
    84 }

    代码中还涉及到了通过new与delete分配与释放一个二维数组,也是面试中的一个问题。

  • 相关阅读:
    Kali学习笔记38:文件上传漏洞
    Kali学习笔记37:APPSCAN
    Kali学习笔记36:AVWS10的使用
    Kali学习笔记35:使用VBScript、PowerShell、DEBUG传输文件
    Kali学习笔记34:配置TFTP和FTP服务
    《day13--异常的进阶和包的使用》
    《java作业》
    《day12---异常》
    《AppletButtonEvent.java》
    《CheckboxDemo.java》
  • 原文地址:https://www.cnblogs.com/rainsoul/p/6604764.html
Copyright © 2011-2022 走看看