C++ 代码,在不超出 k 的前提下计算复制操作次数
假设我们有一个包含 n 个元素的数组 A 和另一个数字 k。有 n 堆糖果。第 i 堆有 A[i] 个糖果。我们可以在两个索引 i 和 j (i != j) 上执行此操作,然后在 A[i] 中再添加 A[i] 个糖果(A[i] 不会减少)。我们可以执行此操作任意多次,但不幸的是,如果某一堆糖果严格超过 k 个,我们则无法再执行此操作。我们必须找出我们可以执行此操作的最多数次。
因此,如果输入为 A = [1, 2, 3]; k = 5,则输出将为 5,因为我们可以将 i = 0 视作 j = 1 三次,并视作 j = 2 两次。因此,总共 5 次。
步骤
要解决此问题,我们将遵循以下步骤:
ans := 0 n := size of A sort the array A for initialize i := 1, when i < n, update (increase i by 1), do: ans := ans + (k - A[i]) return ans
示例
让我们看看以下实现以加深理解:
#include <bits/stdc++.h> using namespace std; int solve(vector<int> A, int k){ int ans = 0; int n = A.size(); sort(A.begin(), A.end()); for (int i = 1; i < n; i++){ ans += (k - A[i]) / A[0]; } return ans; } int main(){ vector<int> A = { 1, 2, 3 }; int k = 5; cout << solve(A, k) << endl; }
输入
{ 1, 2, 3 }, 5
输出
5
广告