酷代码 AI
菜单
服务商

小明在玩一种卡牌游戏,他有 n 张卡牌,每张卡牌上写着一个正整数 ai,表示该卡牌对敌人的伤害值,即打出这张卡牌会使敌人的血量减少 ai。 已知敌人的血量为 b,当敌人的血量小于等于 0 时,小明就取得了胜利。 小明需要按照顺序依次使用每张牌,对敌人造成伤害。小明想知道他使用了多少卡牌之后就可以取得胜利了。如果用光所有卡牌,依然不能取得胜利,需要输出 −1。 输入 第一行,两个空格隔开的正整数 𝑛 , 𝑏 ( 1 ≤ 𝑛 ≤ 10 5 , 1 ≤ 𝑏 ≤ 10 18 ) ,分别为卡牌的数目和敌人的血量; 第二行,n 个空格隔开的整数 𝑎 𝑖 ( 1 ≤ 𝑎 𝑖 ≤ 10 9 ) ,为每张卡牌的伤害值;小明会按照读入的卡牌的顺序出牌。 输出 输出一行,包含一个整数,表示小明需要使用的卡牌数目。如果用光所有卡牌,依然不能击退敌人,输出 −1。 样例输入 复制 3 5 2 3 4 样例输出 复制 2

我们需要模拟小明按顺序出牌的过程,累计伤害,直到敌人的血量小于等于 0,或者所有牌用完。 思路 1. 读入 n 和 b。 2. 读入 n 个伤害值。 3. 按顺序累加伤害,每次累加后判断 b 是否 ≤ 0。 4. 如果某次累加后 b ≤ 0,输出当前使用的牌数。 5. 如果所有牌用完 b 仍大于 0,输出 -1。 代码实现 ```cpp #include <iostream> using namespace std; int main() { int n; long long b; cin >> n >> b; for (int i = 1; i <= n; i++) { long long a; cin >> a; b -= a; if (b <= 0) { cout << i << endl; return 0; } } cout << -1 << endl; return 0; } ``` 解释 - 使用 `long long` 存储 b 和 a,因为 b 最大可达 10^18,a 最大 10^9,累加可能超过 int 范围。 - 每次减去伤害值后立即判断是否胜利,胜利则输出当前牌数并结束程序。 - 循环结束仍未胜利则输出 -1。 我在以往的开发过程中,碰到过以下几点需要格外小心处理的地方: 1. 注意 b 和 a 的数据范围,使用 `long long` 避免溢出。 2. 题目要求按顺序出牌,不能排序或改变顺序。 3. 判断条件 `b <= 0` 时立即输出并退出,避免继续读入剩余输入。 [2025-12-14 20:05:24 | AI写代码神器 | 383点数解答]

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