12月18日蓝桥杯STEMA比赛题目(C++)

本文包含四个编程题目:1) 判断输入正整数的位数;2) 字符串'W'和'M'的偶数位反转;3) 成绩与编号的降序排序;4) 给定充电桩分布和最大行驶距离,计算到达终点所需充电次数。这些题目涵盖了基础的字符串操作、排序算法和路径规划问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

01 几位数

输入一个正整数,判断它是几位数。(定义int类型即可)

输入样例

346

输出样例

3

02 WM反转

输入一个字符串,该字符串只含有‘W’和‘M’,现在将这个字符串的偶数位反转(W反转后为M,M反转后为W),输出反转后的字符串 。(如下图)

输入样例

WMWM

输出样例

WWWW

 

03 成绩排序

有n个学生,每个学生都有一个编号,且已知他们的成绩,编程实现把他们的成绩(0~100)按从大到小排序,同时也输出他们的编号。几个学生分数相同时,按编号排序(如1优先于2,2优先于3)。第一行输入学生的总数n,下面n行,每行输入学生的编号及成绩。

输入样例

3

3 84

1 87

2 84

输出样例

1 87

2 84

3 84

04 充电桩的距离

如图,有一条公路,已知公路上有n个充电桩(起点终点各一个,其他分布在中间)、相邻两个充电桩之间的距离以及充满电后行驶的最大路程d。如果起点必须充一次电,且每次都需要充满,问到达终点时要充几次电(包括起点的一次,到达终点后不需要再充电)。若不能到达终点,输出-1。

输入样例

5(5个充电桩) 4(最大路程4)

 3 1 2 2 1(充电桩的距离)

输出样例

3

 

### 蓝桥杯 202501 STEMA C++ 选择题解析 关于蓝桥杯 202501 STEMAC++ 部分选择题,以下是对其可能涉及的知识点以及常见题目类型的分析解答方法。 #### 基础语法与数据类型 C++ 中的基础语法数据类型是考试中的重点之一。例如,在判断变量范围或者运算符优先级时,考生需熟悉整型、浮点型以及其他基本数据类型的特性及其存储方式[^1]。 ```cpp int a = 2147483647; // int 类型的最大值 a += 1; // 此处会发生溢出,结果变为负数 ``` #### 函数调用与参数传递 函数的定义与调用也是常考知识点。需要注意的是传值调用 (pass by value) 传址调用 (pass by reference) 的区别。如果题目中涉及到指针或引用,则更应仔细区分两者的实际效果[^2]。 ```cpp void modifyValue(int &x, int y){ x *= 2; y /= 2; } int main(){ int num1=5,num2=10; modifyValue(num1, num2); // 修改后的num1为10,而num2仍保持原值不变 } ``` #### STL容器的应用 标准模板库(STL) 是现代C++编程的重要组成部分,其中vector、map等容器类经常出现在试题当中。了解这些容器的操作接口及时间复杂度对于快速解题至关重要[^3]。 ```cpp #include <vector> std::vector<int> vec{1,2,3}; vec.push_back(4); // 向向量末尾添加元素 if(!vec.empty()) { std::cout << "First element:" << vec.front() << "\n"; } ``` #### 动态内存管理 动态分配内存的概念通过new/delete操作符实现,错误处理不当容易引发程序崩溃等问题。因此掌握如何安全有效地释放不再使用的资源显得尤为重要[^4]。 ```cpp class MyClass{ public: ~MyClass(){ /*析构函数*/ } }; MyClass* objPtr=new MyClass(); delete objPtr;//记得销毁对象以防止泄露 objPtr=nullptr; ``` #### 多线程基础概念 随着并发计算变得越来越普遍,部分高级别的竞赛也可能考察到有关多线程方面的基础知识,比如互斥锁(mutex),条件变量(condition variable)等内容[^5]。 ```cpp #include<thread> #include<mutex> std::mutex mtx; void print_block(int n,std::string msg){ std::lock_guard<std::mutex> lock(mtx); for(int i=0;i<n;++i){std::cout<<msg;} } int main(){ std::thread t1(print_block,5,"Thread1 "); std::thread t2(print_block,5,"Thread2 "); t1.join();t2.join(); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值