22年编程题共40分(15,15,10),其中第一题考察的是简单的输入输出和结构体排序,代码量略大;第二题考察的是一个比较简单的思维题,重在思考过程,代码量很小;第三题难度相比前两道要大一些,代码量一般,考察的是迭代法(二进制表示法)实现指数型子集枚举
or 递归实现指数型子集枚举
,
【915 全程班】火热报名中,915 常考但是王道没有的知识点一网打尽(含纸质版资料),且配套丰富练习题,425+高分学长在线答疑,请联系 v:yinuo0316-
一、无人机打靶
题目描述
有 N N N 支队伍参赛,每个队伍的无人机成绩为 S S S ,且每个无人机颜色被随机涂为蓝(b)、红(r)、绿(g)、紫(p)之一。
输入格式
第一行包含整数
N
N
N,表示参加的队伍数目,即无人机数目。
接下来
N
N
N 行,每行包含每支参赛队伍的无人机颜色和打靶成绩
S
S
S ,由空格分隔开。
输出格式
输出内容由两部分组成。
第一部分输出各种颜色对应的无人机数目。
第二部分根据按照成绩从大到小进行排序,输出无人机打靶成绩
S
S
S 和对应的无人机颜色。
数据范围
1
<
=
N
<
=
30
1 <= N <= 30
1<=N<=30
0
<
=
S
<
=
100
0 <= S <= 100
0<=S<=100
输入样例
5
b 80
p 95
b 85
g 90
r 90
输出样例
blue 2
green 1
purple 1
red 1
95 purple
90 green
90 red
85 blue
80 blue
C++ 代码
#include <iostream>
#include <algorithm>
#include <unordered_map>
using namespace std;
const int N = 35;
struct Node
{
char c;
int s;
} q[N];
unordered_map<char, int> cnt;
unordered_map<char, string> color{
{'g', "green"},
{'r', "red"},
{'b', "blue"},
{'p', "purple"}
};
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i ++)
{
cin >> q[i].c >> q[i].s;
cnt[q[i].c] ++;
}
for (auto t : cnt)
cout << color[t.first] << ' ' << t.second << endl;
cout << endl;
for (int i = 0; i < n; i ++)
for (int j = i + 1; j < n; j ++)
if (q[i].s < q[j].s)
swap(q[i], q[j]);
for (int i = 0; i < n; i ++)
cout << q[i].s << ' ' << color[q[i].c] << endl;
return 0;
}
比较懒了,直接放题目链接吧,基本都是力扣原题,不多说啥了
第二题
第三题
第二题是原题,第三题稍加改动,求得每一个子集之后对子集求和看是否满足目标,满足就输出该子集,否则输出None
即可,思想都是一致的。
【特别提醒】 上课时老师说了,现在的IDE都很智能了,所以不会细扣你的语法错误,只要你的思路对了,就能拿到很多分。所以,如果在考场上类似这种第三题,你不会写代码的话,可以争取把算法的核心思想表述清楚,还是能拿不少分数的。可以参考参考力扣官方题解的解题思路,我觉得它的表述就挺清楚的,我就不重复写了,大家加油:)
【915 全程班】火热报名中,915 常考但是王道没有的知识点一网打尽(含纸质版资料),且配套丰富练习题,425+高分学长在线答疑,请联系 v:yinuo0316-