题目简述:
给定一数字,写出其螺旋矩阵,例如:
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.
解题思路:
用二维数组是肯定的了。
开始考虑用循环解决问题,但是考虑用循环会不会太麻烦,但是最后还是用了循环没有想到别的好办法。
用循环就是写出最外圈的程序,然后往里进行循环就是了。
源代码:
#include<iostream>
using namespace std;
int main()
{
int t,n,r=1,i,j;
while(cin>>t)
{
while(cin>>n)
{
int a[n+1][n+1];
int a1=1,b1=1,a2=n,b2=n,p=1;
while(1)
{
for(j=a1;j<=a2;j++)
{
a[b1][j]=p;
p++;
if(p>n*n)
break;
}
if(p>n*n)
break;
b1++;
for(i=b1;i<=b2;i++)
{
a[i][a2]=p;
p++;
if(p>n*n)
break;
}
if(p>n*n)
break;
a2--;
for(j=a2;j>=a1;j--)
{
a[b2][j]=p;
p++;
if(p>n*n)
break;
}
if(p>n*n)
break;
b2--;
for(i=b2;i>=b1;i--)
{
a[i][a1]=p;
p++;
if(p>n*n)
break;
}
if(p>n*n)
break;
a1++;
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(j==n&&i!=n)
cout<<a[i][j]<<endl;
else
if(j==n&&i==n)
cout<<a[i][j]<<endl<<endl;
else
cout<<a[i][j]<<'\t';
}
}
if(r==t)
break;
r++;
}
}
return 0;
}