A17091. 苗族织锦纹样生成
填空题
中等
知识点
题目描述
苗族织锦纹样生成
题目描述
苗族织锦以精美对称纹样闻名,工匠常以数字规律设计图案。现给定一个正整数n(奇数),请生成n行n列的织锦纹样矩阵:矩阵中心为数字1,向外每层数字依次递增1,形成回形纹样,还原苗族织锦的对称美学。
输入格式
输入一个奇数n(3≤n≤9),表示织锦矩阵的边长。
输出格式
输出n行,每行n个数字,数字间用空格分隔。
参考答案
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int n;
cin >> n;
int center = n / 2; // 中心索引(整数除法,对于奇数n有效)
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
// 计算当前位置到中心的切比雪夫距离,再加1得到数字
int value = max(abs(i - center), abs(j - center)) + 1;
cout << value;
if (j < n - 1) cout << ' ';
}
cout << endl;
}
return 0;
}答案解析
1. 确定矩阵中心位置,坐标为 (n//2, n//2)。
2. 从最外层到最内层逐层填充数字,层数由距离边界最近的距离决定。
3. 每一层的数字值等于该层到边界的步数加1,中心层为1。
4. 对于每个位置 (i, j),计算其所在层:min(i, j, n-1-i, n-1-j) 得到层数索引。
5. 将该层索引转换为对应数字,即 层数索引倒序递增,从外向内每层加1。
6. 遍历矩阵每个位置,根据上述规则填入对应数字。
7. 按行输出矩阵,每行数字以空格分隔。 知识点 编写循环结构的程序、循环结构嵌套、多层循环结构、数组的遍历、基本的输入输出方法、变量的定义、变量的使用、基本的运算语句、编写循环结构的程序、循环结构嵌套、数组的遍历、基本的输入输出方法、变量的定义、变量的使用、基本的运算语句、常用数学函数
上一题
下一题