题目:输入n,输出如下矩阵。
例子:
输入5
输出
3 3 3 3 3
3 2 2 2 3
3 2 1 2 3
3 2 2 2 3
3 3 3 3 3
方案一:
利用螺旋矩阵的思想解决,但要创建数组不利于程序的快速执行,当n过大时会超空间。
#include<iostream>
using namespace std;
int main(){
int n;
while(cin>>n)
{
int a[500][500],up=1,down=n,left=1,right=n,i=1,j=1,t=(n+1)/2;
while(t>=1)
{
while(j<=right)
{
a[i][j]=t;
j++;
}
j--;up++;
while(i<=down)
{
a[i][j]=t;
i++;
}
i--;right--;
while(j>=left)
{
a[i][j]=t;
j--;
}
j++;down--;
while(i>=up)
{
a[i][j]=t;
i--;
}
i++;left++;
t--;j++;
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
}
return 0;
}
方案二:
不创建数组
#include<iostream>/*注意n的奇偶*/
using namespace std;
int main(){
int n,i,j;
while(cin>>n)
{
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(i==j)
{
if(i<=(n+1)/2)
cout<<(n+1)/2+1-i<<" ";
if(i>(n+1)/2)
cout<<i-(n+1)/2+n%2<<" ";
}
if(i+j==n+1&&n%2==0)
{
if(i<=(n+1)/2)
cout<<(n+1)/2+1-i<<" ";
if(i>(n+1)/2)
cout<<i-(n+1)/2+n%2<<" ";
}
if(i+j==n+1&&n%2!=0)
{
if(i<(n+1)/2)
cout<<(n+1)/2+1-i<<" ";
if(i>(n+1)/2)
cout<<i-(n+1)/2+n%2<<" ";
}
if(i<j&&i+j<n+1)
cout<<(n+1)/2+1-i<<" ";
if(i>j&&i+j<n+1)
cout<<(n+1)/2+1-j<<" ";
if(i>j&&i+j>n+1)
cout<<i-(n+1)/2+n%2<<" ";
if(i<j&&i+j>n+1)
cout<<j-(n+1)/2+n%2<<" ";
}
cout<<endl;
}
}
return 0;
}