该文针对C++数组初学者,本篇主要运用二维数组以及循环,条件语句的知识来解决问题。
目录
1、题目
2、思路
3、完整代码
题目:
编程,打印n*n(n<10)的螺旋方阵。
思路:
首先对螺旋方阵进行观察。
我们可以发现:
打印方阵要使用二维数组;
打印轮旋方阵可以通过循环来实现;
每个循环都由“最左列——>最下列——>最右列——>最上列”对数组进行内容的填充。
同时,要注意当n为奇数时与n为偶数时,为两种情况。
偶数:若n=6,我们可以观察发现需要执行三次循环。
奇数:若n=5,我们可以发现执行三次循环会发生旧数值被新数值覆盖的现象,执行两次循环最中间的数就需要另外赋值。
完整代码:
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int n;
cin>>n;
int q;
q=n;
int a[10][10];
int m=1;
int t=0;
if(n%2==0)
{
while(n!=t)
{
for(int i=t;i<n;i++)
{
int j=t;
a[i][j]=m;
m++;
}
for(int j=t+1;j<n;j++)
{
int i=n-1;
a[i][j]=m;
m++;
}
for(int i=n-2;i>=t;i--)
{
int j=n-1;
a[i][j]=m;
m++;
}
for(int j=n-2;j>t;j--)
{
int i=t;
a[i][j]=m;
m++;
}
n--;
t++;
}
}
else
{
while(n!=t+1)
{
for(int i=t;i<n;i++)
{
int j=t;
a[i][j]=m;
m++;
}
for(int j=t+1;j<n;j++)
{
int i=n-1;
a[i][j]=m;
m++;
}
for(int i=n-2;i>=t;i--)
{
int j=n-1;
a[i][j]=m;
m++;
}
for(int j=n-2;j>t;j--)
{
int i=t;
a[i][j]=m;
m++;
}
n--;
t++;
}
a[n-1][n-1]=m;
}
for(int i=0;i<q;i++)
{
for(int j=0;j<q;j++)
{
cout<<setiosflags(ios::left)<<setw(10)<<a[i][j];
}
cout<<endl;
}
return 0;
}
运行结果:
注:该文章若存在问题欢迎指正,感谢观看。