头歌 2022 春第一期 Greeker's party 12 周
第 1 关:牛牛
看题目描述,不愧是同学出的题目,真的讲解的细致入微,我来简单概括如下:
给定 5
个数字,范围 0 ~ 10
,如果能找到任一 3
张牌满足数值和为 10
的倍数,那么返回另外 2
张牌模 10
的余数,特殊地,如果余数是 0
则返回 10
。如果找不到这样的 3
张牌,则直接返回 0
。
然后看一眼数据范围,噢对不起没有数据范围,结果扫到一眼不让用 STL
库,我丢,不讲武德,我就想用个 vector
来存数据都不让嘛,好吧,那就用 int *
吧。
那这道题思路也很简单,我就把所有的 3
张组合都找出来判断一遍是不是和为 10
的倍数就好了,用个三层循环嵌套来遍历组合。
#include <iostream>
using namespace std;
int main()
{
int *p = new int[5];
for (int i = 0; i < 5; i++)
cin >> p[i];
for (int i = 0; i < 5; i++)
for (int j = 0; j < 5; j++)
for (int k = 0; k < 5; k++)
if (i == j || i == k || j == k) continue; // 防止重复选到同一张卡片
else if ((p[i] + p[j] + p[k]) % 10 == 0) {
int ans = (p[0] + p[1] + p[2] + p[3] + p[4]) % 10;
cout << (ans == 0 ? 10 : ans) << endl;
return 0;
} else {};
cout << 0 << endl; // 找不到符合条件的 3 元组,直接输出 0
return 0;
};
完整代码见