蓝桥杯2022年1月STEMA C++中级组编程真题解析

哈喽啊,好久不见朋友们,昨天蓝桥杯刚过去,趁着我题目还记着,来给你们讲一下

还是那句话,点赞关注加复制代码 \doge.

题目描述我只讲个大概!!!

第一题

题目

给你两个数a,b要求输出两数中较大的一个

解析

没错这是一道非常弱智的题目,我当时看到的时候给我震惊住了(第一次参加真没想到原来真的那么简单),这里给大家用多种方法解答

 方法一

库中自带函数版

#include <iostream>
#include <cmath>
using namespace std;
int main(){
	int a,b;
	cin >> a >> b;
	cout << max(a, b);
	return 0;
}

方法二

自己写函数版

#include <iostream>
using namespace std;
int ma(int a, int b){
	if(a > b){
		return a;
	}
	return b;
}
int main(){
	int a,b;
	cin >> a >> b;
	cout << ma(a, b);
	return 0;
}

方法三

if判断版

#include <iostream>
using namespace std;
int main(){
	int a,b;
	cin >> a >> b;
	if(a > b){
		cout << a;
	}else{
		cout << b;
	}
	return 0;
}

第二题

呦西家人们,有一位热心的大佬给我提供了题目,所以我来补上这道题了

据说这道题是字符串逆序输出

虽说感觉这么说有点不太好,但是的确感觉很简单,你可以采用字符串输入,也可以采用字符数组输入(反正输进去就完事了,你就是用int存问题都不大),然后倒着输出就好

这里提供字符串版本~

#include <iostream>
#include <math.h>
using namespace std;
int main(){
	string s;
	cin >> s;
	for(int i = s.size() - 1; i >= 0; i--){
		cout << s[i];
	}
	return 0;
}

第三题

题目

给你10个数和一个数n,求10个数中相加小于等于n且最接近n的两数之和,如果不存在这样两个数就输出-1

解析

这题虽然没有第一题那么弱智,但也是比较简单的

直接双重for循环

#include <iostream>
using namespace std;
int a[11];
int main(){
	int n;
	for(int i = 1; i <= 10; i++){
		cin >> a[i];
	}
	cin >> n;
	int ans = -1;
	for(int i = 1; i < 10; i++){//这里一定要小于,不然后面会非法访问
		for(int j = i + 1; j <= 10; j++){//i+1防止重复计算
			int res = a[i] + a[j];//也不知道为什么这里一定要设一个变量记录,不然后面会有两个点不过
			if(res <= n && res > ans){
				ans = res;
			}
			if(ans == n){//优化,减少不必要的循环(虽说不优化也不会超时,但是优化是个好习惯
				cout << n;
				return 0;
			}
		}
	}
	cout << ans << endl;
	return 0;
}

第四题

题目

给你n(n <= 10)个数,要求将这两个数分成两组后,每组数的和的差值尽可能的小

输出每组数的和,若不相同,大的在前,中间用空格隔开

解析

说实话,我当时看到这道题还懵逼了一下,怎么难度突然这么大,然后一看数据“昂 直接暴力”

所以这道题的方法当然就是递归

#include <bits/stdc++.h>
using namespace std;
int n, a[12],r1 = (int)1e9,r2;//r1 r2最终答案,初始化使差值最大

void f(int st, int r3, int r4){//st已分配数量,r3 r4临时答案
	if(st == n){//已分配完
		if(abs(r3 - r4) < abs(r1 - r2)){//若有更优解则更新
			r1 = r3;
			r2 = r4;
			
		}
		return;//结束递归,防止陷入死循环
	}
	f(st + 1,r3 + a[st], r4);
	f(st + 1,r3, r4 + a[st]);
}
int main(){
	cin >> n;

	for(int i = 0; i < n; i++){
		cin >> a[i];
	}
	
	f(0,0,0);
	if(r1 > r2){
		cout << r1 << " " << r2;
	}else{
		cout << r2 << " " << r1;
	}
	return 0;
}

这里其实很容易看出来可以做剪枝优化什么的,这个我就懒得讲了

第五题

题目

给你n(n <= 10)个男生和女生的身高,两两一组配对,要求男生升高不比女生矮,不符合要求的对数不能超过k,求有几种配对方案

解析

好吧这道题我第一反应就是回溯,然后就感觉会超时,接着一看数据范围,好吧根本不会

所以这题也还是暴力

#include <bits/stdc++.h>
using namespace std;
int a[11], b [11];//a男生,b女生
bool v[11];//标记是否已经配对过
int n, k;
int ans =0;//最终方案数
void f(int st, int x){//st已配对数量,x不符合要求对数
	if(x > k){//不符合要求对数超限
		return;
	}
	if(st == n){//全部都已配对
		ans++;
		return;
	}
	for(int i = 0;i < n; i++){//一个一个配过去
		if(!v[i]){//如果没有配对过
			if(a[st] < b[i]){//不符合要求
			
				v[i] = 1;//标记已配对
				f(st+1,x + 1);
				v[i] = 0;//回溯取消标记
			}else{//符合要求
				v[i] = 1;
				f(st + 1,x);
				v[i] = 0;
			}
		}
		
	}
}
int main(){
	
	cin >> n >> k;
	for(int i = 0; i < n; i++){
		cin >> a[i];
	}
	for(int i = 0; i < n; i++){
		cin >> b[i];
	}
	f(0,0);
	cout << ans << endl;
	return 0;
}

总结

说实话我感觉蓝桥杯的选择题考的是真的范围很广(但编程大题也是真的弱智),五道大题三道暴力,真的没啥技术含量

感觉这个比赛就印证了一句话

暴力出奇迹,打表出省一

  • 18
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论
2023年2月蓝桥STEMA评测C中级组,氧气值、燃料值、装备重量是评测中的三个关键指标。 首先,氧气值是指参赛者所携带的氧气的储备量。在这个评测中,参赛者需要完成一系列与高海拔环境相关的任务,因此氧气的充足与否直接关系到参赛者的生命安全和任务完成的效率。参赛者需要合理规划氧气的使用,以满足任务需求,同时尽可能节约氧气的使用,减轻负重,提高携带效率。 其次,燃料值是指参赛者所携带燃料的储备量,如液态燃料等。在这个评测中,参赛者可能需要使用燃料进行加热、照明或其他用途,因此燃料的储备量也直接关系到任务的顺利进行。参赛者需要合理估计燃料的消耗量,并储备足够的燃料,以确保任务期间的能源供应。 最后,装备重量是指参赛者在进行任务时所携带装备的总重量。在这个评测中,参赛者需要具备一定的装备,如登山工具、食物、药品等,但同时也需要合理控制装备的重量,以减少负担并提高机动性。参赛者需要权衡装备的必要性和其重量,选择轻便而又功能齐全的装备,以获得最佳的任务表现。 综上所述,氧气值、燃料值和装备重量是2023年2月蓝桥STEMA评测C中级组的三个重要指标。参赛者需合理规划、储备和利用氧气和燃料,同时也需要精心选择装备,以保证任务的安全和效率。这些指标将考察参赛者的规划能力、资源管理能力和任务执行能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bamboo_Day

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值