当前位置: 首页 > news >正文

1267: 【入门】鲜花方阵

题目描述

光明小学艺术节快要来了,老师要求同学们布置一个n * n的花盆方阵(n是奇数,n<=9);

如果n=5,那么方阵的形状如下图所示;

如果n=7,那么方阵的形状如下图所示;
 

请读入一个整数n(奇数),输出如图所示的方阵,为了方便输出,用1表示黄色的花盆,0表示红色花盆,输出时数字场宽设置为3。

例如:n=5,那么实际要输出的方阵的结果如下
 

n=7,那么实际要输出的方阵的结果如下
 

 

输入

一个整数n

输出

如图所示的图形

样例输入
5
样例输出
  1  1  0  1  11  0  1  0  10  1  0  1  01  0  1  0  11  1  0  1  1

代码实现及解析

#include <bits/stdc++.h>
using namespace std;int main() {int n, i, j;cin >> n;int a[n][n];for (i = 0; i < n; i++) {for (j = 0; j < n; j++) {a[i][j] = 1;if (i == n / 2 && j == n / 2) {a[i][j] = 0;}if (i + j == n / 2 || i - j == n / 2 || j - i == n / 2 || i + j == (n / 2 - 1 + n)) {a[i][j] = 0;}printf("%3d", a[i][j]);}cout << endl;}return 0;
}

深度解析代码

这段C++代码生成并打印一个特定模式的n×n矩阵。让我们逐步分析它的工作原理和实现思路。

代码结构解析

矩阵填充逻辑

代码通过双重循环填充矩阵:

for (i = 0; i < n; i++) {for (j = 0; j < n; j++) {a[i][j] = 1;  // 默认所有元素为1// 特殊位置设置为0if (i == n / 2 && j == n / 2) {a[i][j] = 0;}if (i + j == n / 2 || i - j == n / 2 || j - i == n / 2 || i + j == (n / 2 - 1 + n)) {a[i][j] = 0;}printf("%3d", a[i][j]);  // 格式化输出}cout << endl;
}

模式生成原理

  1. 默认值:所有元素初始化为1。

  2. 中心点:当i == n/2 && j == n/2时设为0,这是矩阵的正中心(当n为奇数时)。

  3. 四条对角线

    • i + j == n / 2:主对角线方向的反斜线

    • i - j == n / 2:副对角线方向的正斜线

    • j - i == n / 2:副对角线方向的正斜线(另一侧)

    • i + j == (n / 2 - 1 + n):主对角线方向的反斜线(另一侧)

这些条件共同在矩阵中形成一个"X"形状的图案,中心点被清零。

示例分析

以n=5为例:

  • n/2 = 2

  • 四条对角线条件:

    1. i+j=2

    2. i-j=2

    3. j-i=2

    4. i+j=2-1+5=6

生成的矩阵:

1  0  1  0  1
0  1  1  1  0
1  1  0  1  1
0  1  1  1  0
1  0  1  0  1

可以看到:

  • 中心点(2,2)为0

  • 四条对角线上的元素为0,形成X形状

代码特点

  1. 格式化输出:使用printf("%3d")确保每个数字占3个字符宽度,保持对齐。

  2. 边界处理:对于偶数n,中心点可能不完全对称,但逻辑仍然适用。

  3. 数学关系:通过简单的数学关系(i±j)来定义图案,而非硬编码。

http://www.xdnf.cn/news/621703.html

相关文章:

  • 【PhysUnits】10 减一操作(sub1.rs)
  • Python学习心得:代码森林的冒险
  • SYN Flood攻击:原理、危害与防御指南
  • PostGIS实现栅格数据转二进制应用实践【ST_AsBinary】
  • 【esp32 WIFI连接】-STA模式
  • rce命令执行原理及靶场实战(详细)
  • Vue项目前后端交互大量数据的-之-前端优化方案
  • 前端流行框架Vue3教程:25. 组件保持存活
  • 湖北理元理律师事务所债务优化方案解析:如何科学规划还款保障生活质量
  • 0304考试通过-逻辑回归实战-机器学习-人工智能
  • Symbol、Set 与 Map:新数据结构探秘
  • uniapp-商城-66-shop(2-品牌信息显示,数据库读取的异步操作 放到vuex actions)
  • Perl单元测试实战指南:从Test::Class入门到精通的完整方案
  • Linux系统管理与编程23:巧用git资源一键部署LAMP
  • ShenNiusModularity项目源码学习(29:ShenNius.Admin.Mvc项目分析-14)
  • React整合【ECharts】教程001:柱状图的构建和基本设置
  • 【Python 中 lambda、map、filter 和 reduce】详细功能介绍及用法总结
  • Java三十而立:Java 的30岁与Spring AI 1.0正式发布
  • STC89C52RC/LE52RC
  • 嵌入式Openharmony系统应用开发与实现方法
  • (已开源-CVPR2024) RadarDistill---NuScenes数据集Radar检测第一名
  • TypeScript 和 JavaScript核心关系及区别
  • 最大似然估计(Maximum Likelihood Estimation, MLE)详解
  • 机器学习课程设计报告 —— 基于二分类的岩石与金属识别模型
  • PHP SPL 自动加载机制详解与实战应用:spl_autoload_register 使用指南
  • BLIP论文笔记
  • 使用 CodeBuddy 实现视频合并工具:解决本地视频处理痛点
  • 【RabbitMQ运维】集群搭建
  • 【强化学习】#7 基于表格型方法的规划和学习
  • 力扣 283.移动零 (双指针)