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

华为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
Visual Studio Code运行 C/C++ 配置

Visual Studio Code运行 C/C++ 配置

Visual Studio Code运行 C/C++ 配置 * 安装C++插件 * 配置C++插件 * 工作流程如何串联 * 测试环境是否配置成功 * 参考: 安装C++插件 如上图,请安装: * C/C++ * C/C++ Extension Pack 两个插件。 其中C/C++ Extension Pack包含图中的:C/C++ Themes,CMake,CMake Tools 3个插件。 如果没有安装完全,请手动搜索插件名称进行安装。 配置C++插件 前提:下载mingw64并配置环境变量,请确保在系统内已经配置完成了g++编译器。 需要配置三个json格式文件。如下: ① tasks.json : 编译器构建 配置文件 ; ② launch.

By Ne0inhk
C++——stack与queue

C++——stack与queue

目录 引言 容器适配器 一、什么是容器适配器 二、底层容器的选择 标准库中的stack 一、stack的基本概念 二、stack的常用接口 三、stack的模拟实现 标准库中的queue 一、queue的基本概念 二、queue的常用接口 三、queue的模拟实现 标准库中的priority_queue 一、priority_queue的基本概念 二、priority_queue的常用接口 三、priority_queue的使用 结束语 引言 在之前的博客中,我们学习了栈(Stack)与队列(Queue)并尝试使用C语言实现其功能,同时我们在C++的学习中对STL中的string vector等容器也进行了学习,接下来我们来学习C++中的栈和队列。 可以先看看这两篇文章,更有助于我们学习: 数据结构——顺序栈和链式栈 数据结构—

By Ne0inhk
C++的IO流和C++的类型转换----《Hello C++ Wrold!》(29)--(C/C++)

C++的IO流和C++的类型转换----《Hello C++ Wrold!》(29)--(C/C++)

文章目录 * 前言 * C++的类型转换 * 四种命名的强制类型转换操作符 * static_cast * reinterpret_cast * const_cast * dynamic_cast * RTTI(这个了解一下就行了) * C++的IO流 * C++文件的IO流 * stringstream 前言 在 C++ 编程体系中,类型转换与 IO 流是支撑程序数据处理与交互的两大核心环节。类型转换关乎数据在不同类型间的安全传递与运算适配,而 IO 流则负责程序与外部设备(如键盘、屏幕、文件)之间的数据输入与输出,二者共同构成了 C++ 程序实现功能、交互信息的基础框架。 C 语言中的类型转换方式虽简洁,却存在可视性差、难以追踪的问题,容易在复杂程序中引发潜在的逻辑错误。为解决这一痛点,C++ 引入了四种命名明确的强制类型转换操作符 ——static_cast、reinterpret_

By Ne0inhk