1 条题解
-
0
#include <algorithm> #include <iostream> // 使用 iostream 替代 cstdio using namespace std; const int N = 105; int n; int a[N]; int cnt; int main() { // 输入数据规模及数组元素 cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i]; } // 核心逻辑:模拟不断削减数值的过程 while (1) { // 步骤 1:寻找当前数组中值最大的元素下标 mx // 初始假设最后一个元素最大,遍历更新 int mx = n; for (int i = 1; i <= n; i++) { if (a[i] >= a[mx]) { mx = i; } } // 终止条件:如果最大值已经是 0,说明所有数都已被减为 0,退出循环 if (a[mx] == 0) { break; } // 步骤 2:寻找当前数组中所有大于 0 的元素里的最小值 mn // 这里以最大值 a[mx] 作为初始基准(因为它肯定是 > 0 的) int mn = a[mx]; for (int i = 1; i <= n; i++) { if (a[i] > 0) { mn = min(mn, a[i]); } } // 步骤 3:执行操作 // 将找到的最大值减去当前的最小值(相当于进行了一次消除或削减) a[mx] -= mn; // 计数器加 1,记录操作次数 cnt++; } // 输出最终的操作次数 cout << cnt << endl; return 0; }
- 1
信息
- ID
- 501
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 3
- 已通过
- 2
- 上传者
粤公网安备44195502000195号