zoukankan      html  css  js  c++  java
  • 【模板小程序】循环方阵构造(仿《剑指offer》循环矩阵打印)

     1 /*
     2 本程序说明:
     3 
     4 输入:方阵大小n,输出:n*n的旋转方阵
     5 
     6 举例:
     7     当n=2时,输出:
     8     1 2
     9     4 3
    10     当n=4时,输出:
    11     1 2 3 4
    12     12 13 14 5
    13     11 16 15 6
    14     10 9 8 7
    15 
    16 */
    17 #include <iostream>
    18 #include <vector>
    19 
    20 using namespace std;
    21 
    22 void PrintMatrixInCircle(vector<int>& numbers, int columns, int rows, int start,int& number)
    23 {
    24     int endX = columns - 1 - start;
    25     int endY = rows - 1 - start;
    26 
    27     // 从左到右打印一行
    28     for(int i = start; i <= endX; ++i)
    29     {
    30         numbers[start*columns+i]=number++;
    31     }
    32 
    33     // 从上到下打印一列
    34     if(start < endY)
    35     {
    36         for(int i = start + 1; i <= endY; ++i)
    37         {
    38             numbers[i*columns+endX]=number++;
    39         }
    40     }
    41 
    42     // 从右到左打印一行
    43     if(start < endX && start < endY)
    44     {
    45         for(int i = endX - 1; i >= start; --i)
    46         {
    47             numbers[endY*columns+i]=number++;
    48         }
    49     }
    50 
    51     // 从下到上打印一行
    52     if(start < endX && start < endY - 1)
    53     {
    54         for(int i = endY - 1; i >= start + 1; --i)
    55         {
    56             numbers[i*columns+start]=number++;
    57         }
    58     }
    59 }
    60 
    61 void PrintMatrixClockwisely(vector<int>& numbers, int columns, int rows,int& number)
    62 {
    63     int start = 0;
    64 
    65     while(columns > start * 2 && rows > start * 2)
    66     {
    67         PrintMatrixInCircle(numbers, columns, rows, start, number);
    68         ++start;
    69     }
    70 }
    71 
    72 
    73 int main()
    74 {
    75     int n;
    76     while(cin>>n)
    77     {
    78         int number=1;
    79         vector<int> numbers(n*n,0);
    80         PrintMatrixClockwisely(numbers, n, n, number);
    81         for(int i=0;i<n*n;++i)
    82         {
    83             if(0==i%n &&i!=0)
    84                 cout<<endl;
    85             cout<<numbers[i]<<" ";
    86         }
    87         cout<<endl;
    88     }
    89     return 0;
    90 }
    『注:本文来自博客园“小溪的博客”,若非声明均为原创内容,请勿用于商业用途,转载请注明出处http://www.cnblogs.com/xiaoxi666/』
  • 相关阅读:
    磁盘挂载基本概念
    判断cache Line的作用
    map的用法
    java中关键字volatile的作用
    Java获取用户输入
    小白说编译原理lex和yacc环境配置-多图
    C++中对sprintf()函数的说明(转)
    解决VS编译DevExpress后Debug默认产生几个多余的语言包"de" "en" "es" "ja" "ru"的问题
    SqlServer发现不是默认端口1433该如何进行连接
    量化交易之接口篇 — 恒生UFX交易接口基本介绍说明
  • 原文地址:https://www.cnblogs.com/xiaoxi666/p/7269801.html
Copyright © 2011-2022 走看看