【问题描述】输入一个自然数N(1<=N<=9),要求输出如下的魔方阵,即边长为2*N-1,N在中心出现一次,其余位置上的数字从外向中心逐渐增大。
N=3时:
1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1
N=4时:
1 1 1 1 1 1 1
1 2 2 2 2 2 1
1 2 3 3 3 2 1
1 2 3 4 3 2 1
1 2 3 3 3 2 1
1 2 2 2 2 2 1
1 1 1 1 1 1 1
【输入形式】从标准输入读取一个整数N。
【输出形式】向标准输出打印结果。输出符合要求的方阵,每个数字占一个字符宽度,数与数之间有且只有一个空格在每一行末均输出一个回车符。
【输入样例】3
【输出样例】
1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1
【样例说明】输入自然数3,则输出边长为5的方阵,3在方阵的中间出现一次,其余位置上的数字从外向中心逐渐增大。
代码实现:
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int n;
cin >> n;
for (int i = 1; i <= n; i++)
{
int count = 0;
for (int j = 1; j <= i; j++)
cout <<" "<<setw(1) << j;
for (int j = i; j >= 1&&j<n;)
{
cout << " " <<setw(1) << j;
count++;
if (count == (n - i) * 2-1)
{
while (j >= 1)
{
cout << " " << setw(1) << j;
j--;
}
}
}
if (i == n)
{
for (int j = n - 1; j >= 1; j--)
cout << " " <<setw(1) << j;
}
cout << endl;
}
for (int i = 1; i <= n - 1; i++)
{
int count = 0;
for (int j = 1; j <= n - i;)
{
if (j < n - i)
{
cout << " " <<setw(1) << j;
j++;
}
else
{
count++;
cout << " " <<setw(1) << j;
if (count == 2 * i + 1)
break;
}
}
for (int j = n -i-1; j >= 1; j--)
{
cout << " " << setw(1) << j;
}
cout << endl;
}
return 0;
}