遞迴-數字旋轉方陣問題
阿新 • • 發佈:2018-11-25
問題描述:
輸出下圖所示N×N(N≥1)的數字旋轉方陣。要求:採用遞迴法實現。
提示:注意觀察A、B、C、D四個區域。
核心思想:
先用陣列a[i][j]儲存數字num(從1至N2),然後列印。
遞迴函式作用:
n=0:結束遞迴
n=1:存入最後一個數字(N2);
n>1:分別按粉藍紅黃四個方向,用四個for迴圈將num存於第i行第j列即二維陣列a[i][j]中。
程式碼如下:
#include<stdio.h> int a[11][11],i,j,num,size; int xuanzhuan(int n) { if(n==0)return 0; if(n==1) { a[i][j]=num++; return 0; } for(int k=1;k<n;k++,i++)//粉色方向 a[i][j]=num++; for(int k=1;k<n;k++,j++)//藍色方向 a[i][j]=num++; for(int k=1;k<n;k++,i--)//紅色方向 a[i][j]=num++; for(int k=1;k<n;k++,j--)//黃色方向 a[i][j]=num++; i++; //注意用i++和j++來調整下一次遞迴時的起點 j++; //第一圈的起點為圖中的1位置,第二圈的起點為圖中21位置,第三次在33 xuanzhuan(n-2); //下次迴圈時邊長-2 } int main() { i=j=1; num=1; printf("請輸入旋轉陣列的邊長(1到10之間):\n"); scanf("%d",&size); xuanzhuan(size); for(int i=1;i<=size;i++)//列印儲存好的陣列 { for(int j=1;j<=size;j++) printf("%3d ",a[i][j]); printf("\n"); } }