程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 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--;                                  j--;                                  dir += 1;                                  dir %= 4;                              }                          }                          else                          {                              i--;                              j--;                              dir += 1;                              dir %= 4;                          }                          break;                     case 2:                                                    if( j >= 0 )                          {                              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 3:                                                    if( i >= 0 )                          {                              if( !ma[i][j].flag )                              {  www.2cto.com                                printf("%d ", ma[i][j].num);                                  ma[i][j].flag = 1;                                  count++;                                  i--;                              }                              else                              {                                  i++;                                  j++;                                  dir += 1;                                  dir %= 4;                              }                          }                          else                          {                              i++;                              j++;                              dir += 1;                              dir %= 4;                          }                          break;                     }              }                             printf("\n");       }              return 0;   }    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved