简介
这是一份关于2024年CCF非专业级软件能力认证(CSP-J/S 2024)第二轮认证入门级考试的详细信息说明。以下是对这份说明的详细解读:
考试基本信息
时间:2024年10月26日 08:30 - 12:00
题目名称:
扑克牌(poker)
地图探险(explore)
小木棍(sticks)
接龙(chain)
题目类型:均为传统型题目
文件命名与输入输出
可执行文件名:对应每个题目,分别为 poker, explore, sticks, chain
输入文件名:对应每个题目,分别为 poker.in, explore.in, sticks.in, chain.in
输出文件名:对应每个题目,分别为 poker.out, explore.out, sticks.out, chain.out
限制条件
每个测试点时限:
扑克牌、地图探险、小木棍:1.0秒
接龙:2.0秒
内存限制:每个题目均为512 MiB
测试点数目:
扑克牌、地图探险、小木棍:10个
接龙:20个
测试点是否等分:是(意味着每个测试点的分数相同)
注意事项
文件名:必须使用英文小写。
main函数返回值:必须是int类型,程序正常结束时返回值必须是0。
程序代码文件放置位置:需参考各省的具体要求。
错误处理:因违反文件名、返回值类型或程序放置位置要求而出现的错误,申诉时不予受理。
结果比较方式:全文比较,过滤行末空格及文末回车。
程序源文件大小:必须不大于100KB。
栈空间内存限制:与题目的内存限制一致。
评测机器配置:Intel(R) Core(TM) i7-8700K CPU @3.70GHz,内存32GB;时限以此配置为准。
样例文件:只提供Linux格式附加样例文件。
评测环境:在当前最新公布的NOI Linux下进行,各语言的编译器版本以此为准。
提交要求
对于C++语言,提交的程序文件名应为 poker.cpp, explore.cpp, sticks.cpp, chain.cpp。
编译选项为 -O2 -std=c++14 -static。
总结
这份说明详细列出了考试的时间、题目、输入输出文件名、限制条件以及注意事项等关键信息。考生在准备和提交程序时,必须严格遵守这些规定,以避免因不符合要求而导致的错误或问题。同时,考生还需要注意程序的效率和正确性,以确保在规定的时限和内存限制内完成题目的解答。
解析
1.扑克牌(poker)
要解决这个问题,我们需要统计输入的扑克牌中每种花色和点数的牌的数量,然后计算还需要借多少张牌才能构成一副完整的扑克牌。
以下是详细的步骤:
- 读取输入:从文件中读取输入的牌的信息。
- 统计现有牌:使用二维数组或哈希表统计每种花色和点数的牌的数量。
- 计算缺少的牌:遍历统计结果,计算还需要多少张牌才能凑齐一副完整的扑克牌。
- 输出结果:将结果输出到文件中。
下面是完整的 C++ 代码实现:
#include <iostream>
#include <fstream>
#include <vector>
#include <unordered_map>
#include <string>
using namespace std;
int main() {
ifstream infile("poker.in");
ofstream outfile("poker.out");
int n;
infile >> n;
// 使用哈希表记录扑克牌的数量,花色作为key,点数作为value中的一个维度
unordered_map<char, vector<int>> cardCount;
// 初始化哈希表
cardCount['D'] = vector<int>(13, 0); // 方片
cardCount['C'] = vector<int>(13, 0); // 草花
cardCount['H'] = vector<int>(13, 0); // 红桃
cardCount['S'] = vector<int>(13, 0); // 黑桃
// 点数映射,将字符映射到索引
unordered_map<char, int> pointIndex = {
{'A', 0}, {'2', 1}, {'3', 2}, {'4', 3}, {'5', 4}, {'6', 5}, {'7', 6},
{'8', 7}, {'9', 8}, {'T', 9}, {'J', 10}, {'Q', 11}, {'K', 12}
};
// 读取输入的牌
for (int i = 0; i < n; ++i) {
string card;
infile >> card;
char su