【问题描述】输入一个自然数N(1<=N<=9),要求输出如下的魔方阵,即边长为2*N-1,N在中心出现一次,其余位置上的数字从外向中心逐渐增大。 N=3时: 11111 12221 12321 12221 11111 N=4时: 1111111 1222221 1233321 1234321 1233321 1222221 1111111 【输入形式】从标准输入读取一个整数N。 【输出形式】向标准输出打印结果。输出符合要求的方阵,每个数字占一个字符宽度,在每一行末均输出一个回车符。 【输入样例】3 【输出样例】 11111 12221 12321 12221 11111 【样例说明】输入自然数3,则输出边长为5的方阵,3在方阵的中间出现一次,其余位置上的数字从外向中心逐渐增大。
一圈一圈的赋值,每次赋一条边
#include<iostream>
using namespace std;
int main()
{
int arr[17][17];
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
for (int j = i; j <2 * n - 1-i; j++)//上行
{
arr[i][j] = i + 1;
}
for (int j = i; j < 2 * n - 1 - i; j++)//下行
{
arr[2 * n - 2 - i][j] = i + 1;
}
for (int j = i; j < 2 * n - 1 - i; j++)//左列
{
arr[j][i] = i + 1;
}
for (int j = i; j < 2 * n - 1 - i; j++)//右列
{
arr[j][2 * n - 2 - i] = i + 1;
}
}
for (int i = 0; i < 2 * n - 1; i++)
{
for (int j = 0; j < 2 * n - 1; j++)
{
cout << arr[i][j];
}
cout << endl;
}
}
再变个形
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int arr[20][20] = {0};
int n;
int m;
cin >> m >> n;
for (int i = 0; i < n; i++)
{
for (int j = 0; j <= i; j++)
{
arr[j][i] = m;//列赋值
m++;
}
for (int j = i-1; j >= 0; j--)
{
arr[i][j] = m;//行赋值
m++;
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
cout <<setw(4)<< arr[i][j];
}
cout << endl;
}
}
?
|