1. 程式人生 > 其它 >c語言回形取數

c語言回形取數

技術標籤:C/C++c語言

問題描述
  回形取數就是沿矩陣的邊取數,若當前方向上無數可取或已經取過,則左轉90度。一開始位於矩陣左上角,方向向下。
輸入格式
  輸入第一行是兩個不超過200的正整數m, n,表示矩陣的行和列。接下來m行每行n個整數,表示這個矩陣。
輸出格式
輸出只有一行,共mn個數,為輸入矩陣回形取數得到的結果。數之間用一個空格分隔,行末不要有多餘的空格。

樣例輸入
3 3
1 2 3
4 5 6
7 8 9

樣例輸出
1 4 7 8 9 6 3 2 5

樣例輸入
3 2
1 2
3 4
5 6

樣例輸出
1 3 5 6 4 2

#include"stdio.h"
#include"math.h" int main() { int row,col,x,y,k,z,anglePoint,init = 1; //先定義個二維陣列 int left,bottom,top,right; int i,j; int start; scanf("%d",&row); scanf("%d",&col); int TwoArray[row][col]; for(x = 0;x<row;x++){ for(y = 0;y<
col;y++){ TwoArray[x][y] = init; init++; } } //<-到這裡定義完成 printf("%d%d\n",row,col); for(k = 0;k<row;k++){ for(z = 0;z<col;z++){ printf("%d ",TwoArray[k][z]); } } printf
("\n"); for(left = 0;left<row;left++){ printf("%d ",TwoArray[left][0]); } printf("\n"); if(row==1){ for(start = 0;start < col ;start++){ printf("%d ",TwoArray[0][start]); } }else if(col==1){ for(start = 0;start < row ;start++){ printf("%d ",TwoArray[start][0]); } }else{ int max; if(row < col){ max = (int)row/2; } max = (int)col/2; for(anglePoint=0;anglePoint<max;anglePoint++){ //最外層迴圈用來改變回形起點 int left,bottom,top,right; for(left = anglePoint;left<row-(anglePoint*2);left++){ //以下分別是上左下右的邊 printf("%d ",TwoArray[left][anglePoint]); } for(bottom = anglePoint+1;bottom<col-(anglePoint*2);bottom++){ printf("%d ",TwoArray[row-anglePoint-1][bottom]); } for(right = row-anglePoint-2;right!=anglePoint;right--){ printf("%d ",TwoArray[right][col-anglePoint-1]); } for(top = col-anglePoint-1;top != anglePoint;top--){ printf("%d ",TwoArray[anglePoint][top]); } if(row<col){ j = (int)row/2; for(i=0;i<=col-row;i++){ printf("%d ",TwoArray[(int)(row/2)][j]); j++; } }else if(row == col&&row%2 != 0){ j = (int)(row/2); printf("%d",TwoArray[j][j]); }else if(row>col&&col%2 != 0){ j = (int)col/2; for(i=0;i<=row-col;i++){ printf("%d ",TwoArray[j][(int)(col/2)]); j++; } } continue; } } }