GESP2024年3月认证C++二级( 第三部分编程题(2)小杨的日字矩阵 )

GESP2024年3月认证C++二级( 第三部分编程题(2)小杨的日字矩阵 )


一、🎬 小杨要画“日”字

有一天,小杨想用电脑画一个大大的“日”字。

比如当 n = 5 时,他想画成这样:

|---| |xxx| |---| |xxx| |---|

是不是很像“日”字? 😄


二、🌟 题目规则

给你一个奇数 n(比如 5、7、9…)

你要打印一个 n × n 的正方形。

规则:

① 最左列 和 最右列 全部是 |
② 第一行、最后一行、中间一行 全部是 -(但两边还是 |)
③ 其他位置全部是 x


三、🧠 先理解结构

假设 n = 7

行号从 0 到 6:

0 ← 第一行(横线) 1 2 3 ← 中间行(横线) 4 5 6 ← 最后一行(横线)

四、🎯 判断逻辑三步走

在每个位置 (i, j):

1、第一步:是不是最左或最右列?

if (j == 0 || j == n-1) 输出 '|'

优先判断!因为边框最重要。


2、第二步:是不是特殊横线行?

else if (i == 0 || i == n-1 || i == n/2) 输出 '-'

注意:

n/2 就是中间行

比如 n=5:

5/2 = 2

3、第三步:其他情况

else 输出 'x'

五、🎨 为什么要按这个顺序判断?

因为边框优先!

比如第一行:

如果你先判断横线,

两边就会变成 '-',而不是 '|'

所以顺序不能乱!


六、🧩 参考程序

#include <iostream> using namespace std; int main() { int n; cin >> n; for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { char ch; if (j == 0 || j == n - 1) { //第一步:是不是最左或最右列? ch = '|'; } else if (i == 0 || i == n - 1 || i == n / 2) { //第二步:是不是特殊横线行? ch = '-'; } else { //第三步:其他情况 ch = 'x'; } cout << ch; } cout << endl; } return 0; }

七、🌈 理解技巧

把矩阵想成:

🎂 三层蛋糕结构

第一层(顶层)——横线
中间层 —— 横线
底层 —— 横线
两边是柱子 |


八、🎯 本题考察知识点

知识重要程度
双重 for 循环⭐⭐⭐⭐⭐
行列坐标判断⭐⭐⭐⭐⭐
条件判断顺序⭐⭐⭐⭐
图形打印规范⭐⭐⭐⭐

九、课后训练:

(一)、🌟 训练题 1(⭐)—— 空心正方形

1、📝 题目

输入一个整数 n,打印一个 n × n 的空心正方形。

例如 n=5:

***** * * * * * * *****

2、🧠 思路

判断边界:

i == 0 i == n-1 j == 0 j == n-1

是边界 → *
否则 → 空格


3、💻 参考程序

#include <iostream> using namespace std; int main() { int n; cin >> n; for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { if(i == 0 || i == n-1 || j == 0 || j == n-1) cout << "*"; else cout << " "; } cout << endl; } return 0; }

4、📌 易错点

❌ 忘记输出空格
❌ 少写换行


(二)、🌟 训练题 2(⭐⭐)—— 对角线矩阵

1、📝 题目

输入 n(n为奇数),打印:

  • 主对角线是 \
  • 副对角线是 /
  • 中心是 X
  • 其他是 .

n=5:

\.../ .\./. ..X.. ./.\. /...\ 

(中间可以用 X 或任选)


2、🧠 思路

中心:

i == n/2 && j == n/2

主对角线:

i == j

副对角线:

i + j == n - 1

3、💻 参考程序

#include <iostream> using namespace std; int main() { int n; cin >> n; for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { if(i==n/2&&j==n/2) cout<<"X"; else if(i == j) cout << "\\"; else if(i + j == n - 1) cout << "/"; else cout << "."; } cout << endl; } return 0; }

4、📌 易错点

\ 要写成 "\\ "


(三)、🌟 训练题 3(⭐⭐⭐)—— 十字矩阵

1、📝 题目

输入奇数 n,打印十字形:

n=5:

..*.. ..*.. ***** ..*.. ..*..

2、🧠 思路

中间行:

i == n/2

中间列:

j == n/2

3、💻 参考程序

#include <iostream> using namespace std; int main() { int n; cin >> n; for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { if(i == n/2 || j == n/2) cout << "*"; else cout << "."; } cout << endl; } return 0; }

4、📌 关键理解

这题和“日字矩阵”本质一样
只是判断条件不同。


(四)、🌟 训练题 4(⭐⭐⭐)—— 数字边框

1、📝 题目

输入 n,打印边框为数字 n,其余为 0。

n=4:

4444 4004 4004 4444

2、🧠 思路

边界输出 n
其他输出 0


3、💻 参考程序

#include <iostream> using namespace std; int main() { int n; cin >> n; for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { if(i == 0 || i == n-1 || j == 0 || j == n-1) cout << n; else cout << 0; } cout << endl; } return 0; }

4、📌 易错点

注意输出的是数字 n,不是字符。


(五)、🌟 训练题 5(⭐⭐⭐⭐)—— 菱形图案

1、📝 题目

输入奇数 n,打印菱形:

n=5:

 * *** ***** *** *

2、🧠 思路

分两部分:

上半部分 + 下半部分

利用:

abs(i - n/2)

控制空格数。


3、💻 参考程序

#include <iostream> #include <cmath> using namespace std; int main() { int n; cin >> n; for(int i = 0; i < n; i++) { int space = abs(i - n/2); int star = n - 2 * space; for(int s = 0; s < space; s++) cout << " "; for(int k = 0; k < star; k++) cout << "*"; cout << endl; } return 0; }

4、📌 核心理解

行号决定空格数量
空格决定星号数量


十、总结:

🧠 图形打印万能三步法

第一步:找边界 第二步:找特殊行列 第三步:剩下填默认

Read more

Python中一切皆对象:深入理解Python的对象模型

Python中一切皆对象:深入理解Python的对象模型

Python中一切皆对象:深入理解Python的对象模型 * 什么是"一切皆对象"? * Python对象的类型层次 * 1. 内置类型对象 * 2. 函数对象 * 3. 类对象和实例对象 * 4. 模块对象 * 对象行为的统一性 * 特殊方法:对象行为的背后 * 对象模型的实际应用 * 性能考虑 * 总结 Python以其"一切皆对象"的设计哲学而闻名,这种设计为语言带来了极大的灵活性和一致性。本文将深入探讨Python的对象模型,解释为什么说"Python中一切皆对象",并通过实例展示这一特性如何影响我们的编程方式。 什么是"一切皆对象"? 在Python中,从简单的数字、字符串到复杂的函数、类甚至模块,所有这些都是对象。这意味着它们都有: 1. 身份(identity):对象在内存中的唯一地址,可通过id()函数获取 2.

By Ne0inhk
Python中的“==“与“is“:深入解析与Vibe Coding时代的优化实践

Python中的“==“与“is“:深入解析与Vibe Coding时代的优化实践

🌟 Python中的"=="与"is":深入解析与Vibe Coding时代的优化实践 * 1. 🧐 `==`与`is`的本质区别 * 2. 🕵️‍♂️ `is`判断对象身份 - 数组与常量池案例 * 案例1:列表对象的身份 * 案例2:小整数常量池 * 案例3:字符串驻留 * 3. 🔍 `==`与`__eq__`魔法函数 * 4. 🔎 类型判断的正确姿势:使用`is` * 5. 🚀 Vibe Coding时代的提示词优化 * 场景1:解释概念 * 场景2:代码生成 * 场景3:调试帮助 * 📊 对比总结表 * 💡 实际应用建议 * 🌈 结语 在Python的奇妙世界中,==和is这两个看似简单的操作符常常让初学者感到困惑。它们如同双胞胎,外表相似却性格迥异。本文将带你深入探索它们的区别,并通过生动的案例和图表展示它们的应用场景,

By Ne0inhk

C++中lower_bound 与 upper_bound 函数详解

目录 一.核心定义与核心区别 lower_bound(下界函数) upper_bound(上界函数) 二.使用前提与参数说明 1. 必须满足的前提 2. 函数参数 3.返回值  三.用法 (1)判断目标值是否存在 (2)计算目标值的出现次数(统计重复元素) (3)在有序容器中插入元素(保持有序) (4)自定义比较函数(降序) lower_bound 和 upper_bound 是 C++ 标准库 <algorithm> 头文件中的二分查找算法,专门用于在有序区间中高效定位元素 一.核心定义与核心区别 函数的头文件: #include <algorithm>

By Ne0inhk
华为OD机试双机位C卷-面试叫号系统 (Py/Java/C/C++/Js/Go)

华为OD机试双机位C卷-面试叫号系统 (Py/Java/C/C++/Js/Go)

面试叫号系统 华为OD机试双机位C卷 - 华为OD上机考试双机位C卷 100分题型 华为OD机试双机位C卷真题目录点击查看: 华为OD机试双机位C卷真题题库目录|机考题库 + 算法考点详解 题目描述 某公司举行招聘会,面试官通过叫号系统,按照应聘者的预约先后次序依次呼叫应聘者面试。如果被叫到的应聘者没有及时到场,面试官叫不到人就会过号处理。第一次过号的应聘者会被排到下一位,第二次过号则会排队下两位,第三次过号则会被安排到下四位。以此类推,按2^x的次序计算步长,过号次数越多则排队越后,直至队尾。也有人因为某些原因需要优先面试,优先面试的人会被提前叫号,如果优先面试的人未及时到场,则取消优先面试资格,按约定规则处理。 请写一段程序,实现以上排队叫号功能。 输入描述 每行输入1个应聘者预约消息,依次为应聘者编号、姓名、是否优先面试(true是,false 否)、预约顺序(整数1至1000)、过号次数(整数 0 至10),最后一行以Exit结束。 输出描述 从第1个人开始叫号,输出所有被叫到的应聘者信息,格式为编号:姓名:

By Ne0inhk