编程输出以下格式的数据。(趣味题)
When i=0
1
When i=1
7 8 9
6 1 2
5 4 3
When i=2
21 22 23 24 25
20 7 8 9 10
19 6 1 2 11
18 5 4 3 12
17 16 15 14 13
#include <iostream>
#include <string>
using namespace std;
int main(void)
{
int i;
cout<<"请输入半径i:";
cin>>i;
//x,y是数组a的下表
int x=i,y=i;
//medi存储前一个数组a的值
int medi;
int a[100][100]={};
//给定初始数组值
a[i][i]=1;
//i等于0时,特殊处理
if(i==0)
cout<<1;
//j+1;i+1;j-1,j-1;i-1,i-1;
//从i>=1开始,循环总数为2i
//奇数的时候,ij坐标加上1,次数为当前的循环变量
//偶数的时候,ij坐标减去1,次数为当前的循环变量
else
{
for(int m=1;m<=2*i;m++)
{
if(m%2!=0)
{
for(int u=0;u<m;u++)
{
medi=a[x][y];
y=y+1;
a[x][y]=medi+1;
}
for(int u=0;u<m;u++)
{
medi=a[x][y];
x=x+1;
a[x][y]=medi+1;
}
}
if(m%2==0)
{
for(int u=0;u<m;u++)
{
medi=a[x][y];
y=y-1;
a[x][y]=medi+1;
}
for(int u=0;u<m;u++)
{
medi=a[x][y];
x=x-1;
a[x][y]=medi+1;
}
}
}
//最后多出一次累加,需要单独处理
for(int m=1;m<=2*i;m++)
{
medi=a[x][y];
y=y+1;
a[x][y]=medi+1;
}
//以行输出
for(int m=0;m<=2*i;m++)
{
for(int n=0;n<=2*i;n++)
{
cout<<a[m][n];
cout<<" ";
}
cout<<" "<<endl;
}
}
getchar();
//输入字符,退出编译,方便调试
char b;
std::cin>>b;
return 0;
}