[10月考试] A
[10月考试] A
题目描述
小 A 去参加考试,考试共有 nnn 门科目,每一门科目的分数为 2∼52\sim 52∼5 分。
已知小 A 共 nnn 门科目的分数总和为 mmm,求小 A 至少有几门科目考了 222 分。
对于所有数据,1≤n≤1001\leq n\leq 1001≤n≤100,2n≤m≤5n2n\leq m \leq 5n2n≤m≤5n。
输入格式
输入共 111 行 222 个正整数 n,mn,mn,m。
输出格式
输出共 111 行 111 个整数,表示答案。
样例 #1
样例输入 #1
2 5
样例输出 #1
1
样例 #2
样例输入 #2
3 8
样例输出 #2
1
样例 #3
样例输入 #3
4 12
样例输出 #3
0
提示
对于所有数据,1≤n≤1001\leq n\leq 1001≤n≤100,2n≤m≤5n2n\leq m \leq 5n2n≤m≤5n。
最少有多少门科目考了 2 分,并且 其他科目可以是 3、4 或 5 分,通过灵活地分配这些分数来满足总分 m
。
关键点:
- 每门科目的分数范围是 2 到 5 分。
- 我们需要 最少有多少门科目考了 2 分,而其他科目的分数可以是
3
、4
或5
分。 - 目标是最小化
2
分科目的数量。
方案分析:
我们可以这样理解:
- 假设所有科目都考
5
分,总分是5 * n
。 - 我们的目标是 将总分
5 \* n
调整为m
,通过降低某些科目的分数从5
分变为3
分,或从5
分变为2
分。 - 每次将
5
分减少到3
分,我们就减少2
分。 - 每次将
5
分减少到2
分,我们就减少3
分。
优化策略:
- 首先,尽可能减少
3
分的数量。每次将5
分降低到3
分,我们只减少2
分,这样我们可以减少2
分的数量。 - 然后,如果有多余的差值,使用
2
分科目来填充。
#include <iostream>
using namespace std;int main() {int n, m;cin >> n >> m;// 假设所有科目都考了5分,总分是5 * nint max_score = 5 * n;// 计算差值:我们需要从max_score调整到mint difference = max_score - m;// 首先尽量使用3分(每次减少2分)int min_3_count = difference / 2;// 剩余的差值无法再通过3分调整,就使用2分difference -= min_3_count * 2;// 计算最少需要多少门科目考2分int min_2_count = difference / 3;// 如果剩下还有差值,则需要额外增加1个2分科目if (difference % 3 != 0) {min_2_count++;}cout << min_2_count << endl;return 0;
}
代码解析
- 输入读取:读取
n
和m
。 - 计算差值:
difference = 5 * n - m
,表示从5 * n
总分减去目标总分m
的差值。 - 使用尽量多的
3
分科目:每减少2
分,相当于用一个3
分科目替代。 - 剩余差值使用
2
分科目:每减少3
分,相当于用一个2
分科目替代,剩余的差值会决定是否需要增加额外的2
分科目。 - 输出结果:输出最小的
2
分科目数量。