酷代码 AI
菜单
服务商

题目描述 为了丰富人民群众的生活、支持某些社会公益事业,北塔市设置了一项彩票。该彩票 的规则是: 每张彩票上印有 7 个各不相同的号码,且这些号码的取值范围为 1∼33。 每次在兑奖前都会公布一个由七个各不相同的号码构成的中奖号码。 共设置 7 个奖项,特等奖和一等奖至六等奖。 兑奖规则如下: 特等奖:要求彩票上 7 个号码都出现在中奖号码中。 一等奖:要求彩票上有 6 个号码出现在中奖号码中。 二等奖:要求彩票上有 5 个号码出现在中奖号码中。 三等奖:要求彩票上有 4 个号码出现在中奖号码中。 四等奖:要求彩票上有 3 个号码出现在中奖号码中。 五等奖:要求彩票上有 2 个号码出现在中奖号码中。 六等奖:要求彩票上有 1 个号码出现在中奖号码中。 注:兑奖时并不考虑彩票上的号码和中奖号码中的各个号码出现的位置。例如,中奖 号码为 23 31 1 14 19 17 18,则彩票 12 8 9 23 1 16 7 由于其中有两个号码(23 和 1)出现在中奖号码中,所以该彩票中了五等奖。 现已知中奖号码和小明买的若干张彩票的号码,请你写一个程序帮助小明判断

```cpp #include <iostream> using namespace std; // 定义一个函数用于判断每张彩票的中奖情况 int checkLottery(int lottery[], int winning[], int prize[]) { int count = 0; // 遍历彩票上的每个号码 for (int i = 0; i < 7; i++) { for (int j = 0; j < 7; j++) { if (lottery[i] == winning[j]) { count++; break; } } } // 根据匹配的号码数量更新对应的中奖情况 if (count == 7) prize[0]++; else if (count == 6) prize[1]++; else if (count == 5) prize[2]++; else if (count == 4) prize[3]++; else if (count == 3) prize[4]++; else if (count == 2) prize[5]++; else if (count == 1) prize[6]++; return 0; } int main() { int n; cin >> n; int winning[7]; // 输入中奖号码 for (int i = 0; i < 7; i++) { cin >> winning[i]; } int prize[7] = {0}; // 循环处理每张彩票 for (int i = 0; i < n; i++) { int lottery[7]; for (int j = 0; j < 7; j++) { cin >> lottery[j]; } // 调用函数判断当前彩票的中奖情况 checkLottery(lottery, winning, prize); } // 输出每种奖项的中奖张数 for (int i = 0; i < 7; i++) { cout << prize[i]; if (i < 6) cout << " "; } cout << endl; return 0; } ``` 代码解释: 1. `checkLottery` 函数:该函数用于判断一张彩票的中奖情况。它接收三个参数,分别是彩票号码数组 `lottery`、中奖号码数组 `winning` 和存储中奖情况的数组 `prize`。函数内部通过两层循环遍历彩票号码和中奖号码,统计匹配的号码数量。根据匹配的号码数量更新 `prize` 数组中对应的中奖情况。 2. `main` 函数: - 首先读取小明购买的彩票张数 `n`。 - 接着读取中奖号码并存储在 `winning` 数组中。 - 初始化 `prize` 数组,用于存储每种奖项的中奖张数。 - 循环 `n` 次,每次读取一张彩票的号码,并调用 `checkLottery` 函数判断该彩票的中奖情况。 - 最后输出每种奖项的中奖张数。 复杂度分析: - 时间复杂度:$O(n \times 7 \times 7)$,其中 $n$ 是彩票的张数。对于每张彩票,需要遍历 7 个号码,每个号码又需要和中奖号码的 7 个号码进行比较。 - 空间复杂度:$O(7)$,主要用于存储中奖号码和每种奖项的中奖张数。 [2025-11-26 20:00:02 | AI问答 | 773点数解答]

相关提问
发财导航,免费问AI
实用工具查看更多