luogu-P2550 [AHOI2001] 彩票摇奖
GESP C++四级练习,二维/多维数组练习,难度★★☆☆☆。
luogu-P2550 [AHOI2001] 彩票摇奖
题目要求
题目描述
为了丰富人民群众的生活、支持某些社会公益事业,北塔市设置了一项彩票。该彩票的规则是:
- 每张彩票上印有 个各不相同的号码,且这些号码的取值范围为 。
- 每次在兑奖前都会公布一个由七个各不相同的号码构成的中奖号码。
- 共设置 个奖项,特等奖和一等奖至六等奖。
兑奖规则如下:
- 特等奖:要求彩票上 个号码都出现在中奖号码中。
- 一等奖:要求彩票上有 个号码出现在中奖号码中。
- 二等奖:要求彩票上有 个号码出现在中奖号码中。
- 三等奖:要求彩票上有 个号码出现在中奖号码中。
- 四等奖:要求彩票上有 个号码出现在中奖号码中。
- 五等奖:要求彩票上有 个号码出现在中奖号码中。
- 六等奖:要求彩票上有 个号码出现在中奖号码中。
注:兑奖时并不考虑彩票上的号码和中奖号码中的各个号码出现的位置。例如,中奖号码为 ,则彩票 由于其中有两个号码( 和 )出现在中奖号码中,所以该彩票中了五等奖。
现已知中奖号码和小明买的若干张彩票的号码,请你写一个程序帮助小明判断他买的彩票的中奖情况。
输入格式
输入的第一行只有一个自然数 ,表示小明买的彩票张数;
第二行存放了 个介于 和 之间的自然数,表示中奖号码;
在随后的 行中每行都有 个介于 和 之间的自然数,分别表示小明所买的 张彩票。
输出格式
依次输出小明所买的彩票的中奖情况(中奖的张数),首先输出特等奖的中奖张数,然后依次输出一等奖至六等奖的中奖张数。
输入输出样例 #1
输入 #1
2
23 31 1 14 19 17 18
12 8 9 23 1 16 7
11 7 10 21 2 9 31
输出 #1
0 0 0 0 0 1 1
数据规模与约定
对于 的数据,保证 。
题目分析
解题思路
本题的解题思路如下:
问题本质:
- 输入 张彩票,每张彩票有 个不同号码
- 给定一组中奖号码( 个不同数字)
- 统计每个奖项的中奖数量
解题思路:
- 问题建模
- 每张彩票与中奖号码的匹配数决定中奖等级
- 匹配 个号码对应 等奖
- 需要统计 张彩票各自的匹配数
- 数据结构设计
- 使用一维数组存储中奖号码
target[7]
- 使用二维数组存储购买的彩票号码
buy_ary[1005][7]
- 使用一维数组存储各奖项中奖数量
result[7]
- 使用一维数组存储中奖号码
- 处理流程
- 读取输入:
- 读取彩票数量
- 读取中奖号码
- 读取每张彩票的号码
- 匹配统计:
- 遍历每张彩票的每个号码
- 与中奖号码比较,统计匹配数
- 根据匹配数更新对应奖项计数
- 结果输出:
- 按特等奖到六等奖顺序输出
- 读取输入:
- 注意事项
- 号码范围为
- 每组号码都是不重复的
- 号码顺序不影响匹配结果
- 问题建模
复杂度分析:
- 时间复杂度:,其中 为彩票数量
- 空间复杂度:,主要是存储彩票号码的二维数组
{% include custom/custom-post-content-inner.html %}
示例代码
#include <iostream>
// 存储所有购买的彩票号码的二维数组
int buy_ary[1005][7];
int main() {
// n表示购买的彩票数量
int n;
std::cin >> n;
// 存储中奖号码的数组
int target[7] = {0};
// 读入7个中奖号码
for (int i = 0; i < 7; i++) {
std::cin >> target[i];
}
// 存储各个奖项的中奖数量,从特等奖到六等奖
int result[7] = {0};
// 遍历每一张购买的彩票
for (int i = 0; i < n; i++) {
// count记录当前彩票匹配中奖号码的个数
int count = 0;
// 比较每一张彩票
for (int j = 0; j < 7; j++) {
// 读入当前彩票的号码
std::cin >> buy_ary[i][j];
// 将当前号码与所有中奖号码比较
for (int k = 0; k < 7; k++) {
if (buy_ary[i][j] == target[k]) {
count++;
}
}
}
// 如果有匹配的号码,更新对应奖项的中奖数量
// 7-count的含义:7个匹配是特等奖(index 0),6个匹配是一等奖(index 1),以此类推
if (count) {
result[7 - count]++;
}
}
// 按顺序输出各个奖项的中奖数量
for (int i = 0; i < 7; i++) {
std::cout << result[i] << " ";
}
return 0;
}
{% include custom/custom-post-content-footer.md %}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
“luogu-”系列题目可在 洛谷题库 在线评测。
“bcqm-”系列题目可在 编程启蒙题库 在线评测。
GESP/CSP 认证学习微信公众号

Last updated on