學如逆水行舟,不進則退
阿新 • • 發佈:2019-02-16
在上面向物件課程的時候,老師出了一個題目,讓通過程式輸出一個回型矩陣。
n=1的回型矩陣
1
n=2的回型矩陣
1 2
4 3
n=3的回型矩陣
1 2 3
8 9 4
7 6 5
n=4的回型矩陣
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
簡單分析就可以發現,回型矩陣的每一圈都是先向右增加,然後向下增加,然後向左增加,然後向上增加組成的。
根據這個規律得到程式碼:
/* writen by qianshou. 2013/12/5 17:14 pm study at SDNU */ #include<iostream> using namespace std; int main() { int n;//n表示矩陣的規模 int i=0;//i表示行 int j=0;//j表示列 int m=1;//表示要填充的資料 n=5;//輸出5乘以五的矩陣 cout<<"請輸入矩陣的規模n:"; cin>>n; int k=0; int t=n;//t是n的備份 //動態建立二維陣列 int **a=new int *[t]; for(i=0;i<t;i++) { a[i]=new int [t]; } i=0; while(n>0) { //1,列向右遞增; for(;j<n;j++) { a[i][j]=m; m++; } i++; //指向下一行 j--; //j回退到合適位置 //2,行向下遞增; for(;i<n;i++) { a[i][j]=m; m++; } j--; //指向前一列 i--; //i回退到合適位置 //3,列向左遞減; for(;j>=t-n;j--) { a[i][j]=m; m++; } i--; //指向上一行 j++; //j回退到合適位置 //4,行向上遞減; for(;i>t-n;i--) { a[i][j]=m; m++; } j++; //開始下一個迴圈 i++; //i回退到合適位置 n--; } //生成矩陣完成 //輸出矩陣 for(i=0;i<t;i++) { for(j=0;j<t;j++) { cout<<a[i][j]<<"\t"; } cout<<endl; } //釋放陣列空間 for(i=0;i<t;i++) { delete [] a[i]; } delete [] a; return 0; }
給出一個執行的結果: