当前位置:编程学习 > C/C++ >>

顺时针打印矩阵

题目描述:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
输入:
输入可能包含多个测试样例,对于每个测试案例,
输入的第一行包括两个整数m和n(1<=m,n<=1000):表示矩阵的维数为m行n列。
接下来的m行,每行包括n个整数,表示矩阵的元素,其中每个元素a的取值范围为(1<=a<=10000)。
输出:
对应每个测试案例,输出一行,
按照从外向里以顺时针的顺序依次打印出每一个数字,每个数字后面都有一个空格。
样例输入:
4 4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
样例输出:
1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10 
 
代码AC:
 
思想:这题没什么算法,控制好边界就可以了~
 
[cpp] 
#include <stdio.h>  
  
typedef struct mat  
{  
        int num;  
        int flag;  
}mat;  
  
int main()  
{  
    mat ma[1000][1000];  
    int i, j, m, n, dir, count;  
      
    while( scanf("%d%d", &m, &n) != EOF )  
    {  
           for( i = 0; i < m; i++ )  
           {  
                for( j = 0; j < n; j++ )  
                {  
                     scanf("%d", &ma[i][j].num);  
                     ma[i][j].flag = 0;  
                }  
           }  
             
           dir = 0;  // 左 - 下 - 右 - 上 循环  
             
           count = 0;  
           i = 0;  
           j = 0;  
           while( count < n * m )  
           {  
                  switch( dir )  
                  {  
                  case 0:  
                       if( j < n )  
                       {  
                           if( !ma[i][j].flag )  
                           {  
                               printf("%d ", ma[i][j].num);  
                               ma[i][j].flag = 1;  
                               count++;  
                               j++;  
                           }  
                           else  
                           {  
                               j--;  
                               i++;  
                               dir += 1;  
                               dir %= 4;  
                           }  
                       }  
                       else  
                       {  
                           j--;  
                           i++;  
                           dir += 1;  
                           dir %= 4;  
                       }  
                       break;  
                  case 1:  
                         
                       if( i < m )  
                       {  
                           if( !ma[i][j].flag )  
                           {  
                               printf("%d ", ma[i][j].num);  
                               ma[i][j].flag = 1;  
                               count++;  
                               i++;  
                           }  
                           else  
                           {  
                               i--;  
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,