分析:
本題重點是分析矩陣。一開始看錯了蛇,得到另一個矩陣。見附錄一。
矩陣:
7 8 1
6 9 2
5 4 3
本文思路在於,先求最外層矩陣,再求內層矩陣。
最外層矩陣又可以分解成四個相似的子問題。
按照舉例的矩陣來看:即 1 2、3 4、5 6、7 8。
問題引刃而解。
不過我花了很多時間,大概兩個小時,因為一開始的代碼沒有現在的簡潔。
用 i 來代表賦值的次數,可以大幅度減少思維量和代碼量。
(官方給的最優代碼容易想到,但是不容易表達)
#includeusing namespace std; #define maxSize 100 int center=0; int a[maxSize][maxSize]; int element=1; void outArray(int c1,int c2) //center { if(c1==c2) a[c1][c2]=element; //最後一次賦值 int i=-1; while(++i<c2-c1) cin="" i="-1;" "="" int="">>n; while(center<=n-1-center) { outArray(center,n-1-center); center++; } for(int i=0;i 附錄一:
另一種蛇。
/* /擴展的蛇形方陣 7 6 1 8 5 2 9 4 3*/ #includeusing namespace stdl #define maxSize 100 int main() { int n; cin>>n; int a[maxSize][maxSize]; int i=0; //行號 int element=1; for (int j=n-1;j>=0;j--) //列號 { if(i==0) //0 - n-1 { for(;i =0;i--)//while(--i>=0) a[i][j]=element++; i++; //i為0 } } for(int i=0;i