多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 使数组递减的最小减法运算数 > 原文: [https://www.geeksforgeeks.org/find-minimum-number-operation-make-array-decreasing/](https://www.geeksforgeeks.org/find-minimum-number-operation-make-array-decreasing/) 您将得到一个由数字 arr [0],arr [1],…,arr [N – 1]和一个正整数 K 组成的序列。在每个运算中,都可以从数组的任何元素中减去 K。 您需要找到使给定数组减少的最小操作数。 如果每个 i ![0 <= i < N-1](https://img.kancloud.cn/68/7b/687b3cc81217722bfee07a7eb75f69a8_179x20.png "Rendered by QuickLaTeX.com")为![arr[i] >= arr[i+1]](https://img.kancloud.cn/6f/52/6f528239ea4a64b75b95b07695dc7c8f_223x28.png "Rendered by QuickLaTeX.com"),则将数组![arr[0], arr[1], ....., arr[N-1]](https://img.kancloud.cn/fe/e6/fee691ac0c5e931990935b0b01a6ef7e_326x28.png "Rendered by QuickLaTeX.com")称为递减。 > 输入:N = 4,K = 5,arr [] = {1,1,2,3} > 输出:3 > > **说明**: > 由于 arr [1] == arr [0],因此 arr [1]不需要减法。 对于 arr [2],由于 arr [2] > arr [1](2 > 1),所以我们必须用 k 减去 arr [2],并且 arr [2]的一个减法值是-3 该值小于 arr [1]的值,因此减法数仅需 1,现在 arr [2]的值已更新了-3。 > 对于 arr [3]同样,因为 arr [3] > arr [2](3 > -3),所以为此,我们必须两次将 arr [3]减去 k 来得出 arr [3]小于 arr [2],所需的减法数为 2,而 arr [3]的更新值为-7。 现在,通过在每个步骤上加上操作数来计算减法/操作的总数,即= 0 + 1 + 2 = 3。 > > 输入:N = 5,K = 2,arr [] = {5,4,3,2,1} > 输出:0 **方法**: ``` 1\. Traverse each element of array from 1 to n-1. 2\. Check if (arr[i] > arr[i-1]) then Find noOfSubtraction; noOfSubtraction = If ( (arr[i] - arr[i-1]) % k == 0 ) then noOfSubtraction++ Modify arr[i]; arr[i] = ``` 以下是上述方法的实现: ## CPP ``` // CPP program to make an array decreasing #include <bits/stdc++.h> using namespace std; // Function to count minimum no of operation int min_noOf_operation(int arr[], int n, int k) {     int noOfSubtraction;     int res = 0;     for (int i = 1; i < n; i++) {         noOfSubtraction = 0;         if (arr[i] > arr[i - 1]) {             // Count how many times we have to subtract.             noOfSubtraction = (arr[i] - arr[i - 1]) / k;             // Check an additional subtraction is              // required or not.             if ((arr[i] - arr[i - 1]) % k != 0)                 noOfSubtraction++;             // Modify the value of arr[i].             arr[i] = arr[i] - k * noOfSubtraction;         }         // Count total no of operation/subtraction .         res = res + noOfSubtraction;     }     return res; } // Driver Code int main() {     int arr[] = { 1, 1, 2, 3 };     int N = sizeof(arr) / sizeof(arr[0]);     int k = 5;     cout << min_noOf_operation(arr, N, k) << endl;     return 0; } ```