有的时候零零碎碎的东西太多,总归是需要找个地方来记录一下。大神们有个Git、CSDN,我就先在这里水一下吧,就只当像云笔记一样偶尔记录一下生活吧。
今天做了一道题。。。
根据输入的数据N,需要输出一个蛇形矩阵(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
第一行的数据是矩阵的行列数(相等),矩阵应该是上图所示的样子。
对于这样的输出,我们还是要把规律找出来,按照从左到右从上到下,把每一个数按照矩阵最外侧向最内侧填满即可。
P.S.如有更好的方法欢迎大家留言。
# include <iostream>
using namespace std;
int main()
{
int srow,erow,scol,ecol,n;//s e 分别表示是开始还是结束
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;
}
}
程序结果在CodeBlocks16.01 中运行通过
Paste_Image.png
网友评论