第一次写博客,先来个蛇形数组,
代码量其实只有一半,我写了手动输入数据和自动安排数据两种情况,其实本质是一样的,几乎是复制粘贴后进行很小的改动。
我的思路主要是“蛇”要绕圈,绕完外圈绕内圈,就成了一个for循环,绕圈要分四步进行,找出其中的规律后进行编写。
欢迎大佬给我提出意见指正或给出更简单的方法。
#include<iostream>
#include<string>
using namespace std;
int main()
{
cout<<"输入1运行程序,输入0结束程序\n";
int v;
cin>>v;
while(v)
{
cout<<"输入蛇形方阵的行列\n";
int a;
cin>>a;
const int n=a;
int j=0,i=0;
int x[n][n];
cout<<"手动输入数据请按1,自动安排数据请按0\n";
int c;
cin>>c;
if(c) //程序由if else分成两部分
{ //该部分为手动输入
cout<<"请输入方阵的数据\n";
for(int u=0;u<n/2;u++)
{
for( i=u,j=u;j<n-u;j++) //1 第一步
{
cin>>x[i][j];
}
for( i=u+1,j=n-(u+1);i<n-u;i++) //2 第二步
{
cin>>x[i][j];
}
for( j=n-(u+2),i=n-(u+1);j>=u;j--) //3 第三步
{
cin>>x[i][j];
}
i=n-(u+2);j=u;
while(i>u) //4 第四步
{
cin>>x[i][j];
i--;
}
}
if(n%2) //奇数与偶数不一样的部分分开讨论
{
cin>>x[n/2][n/2];
}
}
else //自动安排数据部分
{ //同上部分内容几乎一样
int p=1;
for(int u=0;u<n/2;u++)
{
for( i=u,j=u;j<n-u;j++) //1
{
x[i][j]=p;
p++;
}
for( i=u+1,j=n-(u+1);i<n-u;i++) //2
{
x[i][j]=p;
p++;
}
for( j=n-(u+2),i=n-(u+1);j>=u;j--) //3
{
x[i][j]=p;
p++;
}
i=n-(u+2);
j=u;
while(i>u) //4
{
x[i][j]=p;
p++;
i--;
}
}
if(n%2)
{
x[n/2][n/2]=n*n;
}
}
for( i=0;i<n;i++)
{
for( j=0;j<n;j++)
{
cout<<x[i][j]<<'\t';
}
cout<<'\n';
}
cout<<"\n\n\n程序运行完毕";
cout<<"输入1继续运行程序,输入0结束程序\n";
cin>>v;
}
system("pause");
return 0;
}