c和c++的一些訓練題(10)(列印螺旋方陣)
阿新 • • 發佈:2019-01-24
問題的提出:編寫螺旋方陣。其中螺旋方陣形式如下:
1 12 11 10
2 13 16 9
3 14 15 8
4 5 6 7
設row,column分別代表行、列座標,變數p從1到n2將p依次存入陣列a[row][column]中,要確定row、colomn的變化情況。分析:建立一個二維動態陣列,建立方法見前一篇文章,然後觀察方陣的第一列跟第二列之間的關係,第n行和第n-1行之間的關係,第n列和第n-1列之間的關係,第一行跟第二行之間的關係,根據他們之間的關係,列出表示式就能得到最終結果。大家如果有好的想法可以共同探討,我參考了下別人的想法,但大部分思路還是自己原創的。
程式碼:
結果:// test4.cpp : 定義控制檯應用程式的入口點。 //這是列印的最終目標 //1 12 11 10 //2 13 16 9 //3 14 15 8 //4 5 6 7 #include "stdafx.h" #include <iostream> #include <iomanip> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { int n; cout<<"請輸入方陣的維數:"; cin>>n; cout<<"列印二維陣列:"<<endl; //宣告動態二維陣列 int **data; data=new int *[n]; for(int i=0; i<n; i++) { data[i]=new int[n]; } //初始化二維陣列 for(int i=0; i<n; i++) { for(int j=0; j<n; j++) { data[i][j]=0; } } //對二維陣列賦值 int m=1; int i,j; int round=1; for(i=0; i<= n/2; i++) { //左列 for(j=0; j<(n-2*(round-1)); j++)//0~4 0~2 { data[j+round-1][round-1]=m++; } //下行 for(j=0; j<(n-2*(round-1)-1); j++) //0~3 { data[n-round][j+round]=m++; } //右列 for(j=0; j<(n-2*(round-1)-1); j++) { data[n-j-round-1][n-round]=m++; } //上行 for(j=0; j<(n-2*round); j++) { data[round-1][n-j-round-1]=m++; } round++; } //列印二維陣列 for(i=0; i<n; i++) { for(int j=0; j<n; j++) { cout<<left<<setw(3)<<data[i][j]<<" "; } cout<<endl; } //銷燬二維陣列 for(i=0; i<n; i++) { delete[] data[i]; } delete[] data; system("pause"); return 0; }