問題
【問題描述】輸入一個自然數N(2≤N≤9),要求輸出如下的旋轉矩陣,即邊長爲N,元素取值爲1至N*N,1在左上角,呈順時針方向依次放置各元素。
如N=3時:
【輸入形式】從標準輸入讀取一個整數N。
【輸出形式】向標準輸出打印結果。輸出符合要求的方陣,每個數字佔5個字符寬度,向右對齊,在每一行末均輸出一個回車符。
【輸入樣例】
4
【輸出樣例】
算法設計
矩陣填充邏輯分析如下:
算法設計:
設array[9][9]用於存放旋轉矩陣,n爲旋轉矩陣的階,m爲當前填寫的層數,初值爲0;
讀入一個整數到n;
for(m=0; m<n/2; m++)
填充當前層(即分別填充A,B,C,D四段);
若n爲奇數,則填充最後一個數字;
算法實現
#include<stdio.h>
#define SIZE 9
int main() {
int array[SIZE][SIZE];
int n,m, num, i,j;
num = 1;
scanf("%d",&n);
for (m=0;m<n/2;m++) {
for (i=m;i<n-m-1;i++)
array[m][i] = num++;
for (i=m;i<n-m-1;i++)
array[i][n-m-1] = num++;
for (i=m;i<n-m-1;i++)
array[n-m-1][n-i-1] = num++;
for (i=m;i<n-m-1;i++)
array[n-i-1][m] = num++;
}
if (n%2)
array[n/2][n/2] = num;
for (i=0;i< n;i++) {
for (j=0;j<n;j++)
printf("%5d",array[i][j]);
printf("\n");
}
return 0;
}