有的時(shí)候零零碎碎的東西太多,總歸是需要找個(gè)地方來(lái)記錄一下。大神們有個(gè)Git、CSDN,我就先在這里水一下吧,就只當(dāng)像云筆記一樣偶爾記錄一下生活吧。
今天做了一道題。。。
根據(jù)輸入的數(shù)據(jù)N,需要輸出一個(gè)蛇形矩陣(N*N)。
5
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
第一行的數(shù)據(jù)是矩陣的行列數(shù)(相等),矩陣應(yīng)該是上圖所示的樣子。
對(duì)于這樣的輸出,我們還是要把規(guī)律找出來(lái),按照從左到右從上到下,把每一個(gè)數(shù)按照矩陣最外側(cè)向最內(nèi)側(cè)填滿即可。
P.S.如有更好的方法歡迎大家留言。
# include <iostream>
using namespace std;
int main()
{
int srow,erow,scol,ecol,n;//s e 分別表示是開(kāi)始還是結(jié)束
cin>>n;
int counter=1;
int** matrix = new int*[n];
for(int i=0; i<n; ++i)
{
matrix[i]=new int [n];
}
srow=0;
erow=n-1;
scol=0;
ecol=n-1;
while(counter<=n*n)//判斷是否生成完畢
{
//首行
for(int i=scol; i<=ecol; i++)
{
matrix[srow][i]=counter++;
}
srow++;
//最右列
for(int i=srow; i<=erow; i++)
{
matrix[i][ecol]=counter++;
}
ecol--;
//末行
for(int i=ecol; i>=scol; i--)
{
matrix[erow][i]=counter++;
}
erow--;
//最左列
for(int i=erow; i>=srow; i--)
{
matrix[i][scol]=counter++;
}
scol++;
}
//輸出
for(int i=0; i<n; i++)
{
for(int j=0; j<n; ++j)
{
cout<<matrix[i][j]<<"\t";
}
cout<<endl;
}
}
程序結(jié)果在CodeBlocks16.01 中運(yùn)行通過(guò)
Paste_Image.png