当前位置: 首页 > 编程笔记 >

在C ++中使数组的GCD成为k的倍数的最小操作

诸葛茂勋
2023-03-14
本文向大家介绍在C ++中使数组的GCD成为k的倍数的最小操作,包括了在C ++中使数组的GCD成为k的倍数的最小操作的使用技巧和注意事项,需要的朋友参考一下

假设我们有一个数组arr和另一个值k。我们必须找到最小数量的运算,以使数组的GCD等于k的倍数。在这种情况下,操作将增大或减小该值。假设数组类似于{4,5,6},并且k为5。我们可以将4加1,然后将6减1,因此它变为5。这里的操作数为2。

我们必须按照以下步骤来获得结果-

步骤-

    list-paddingleft-2">
  • 对于数组中的所有元素e,请遵循步骤2和3

  • 如果e不为1,并且e> k,则将结果增加为(e mod k)和(k – e mod k)的最小值。

  • 否则,结果将是结果+ k – e

  • 返回结果

示例

#include <iostream>
using namespace std;
int countMinOp(int arr[], int n, int k) {
   int result = 0;
   for (int i = 0; i < n; ++i) {
      if (arr[i] != 1 && arr[i] > k) {
         result = result + min(arr[i] % k, k - arr[i] % k);
      } else {
         result = result + k - arr[i];
      }
   }
   return result;
}
int main() {
   int arr[] = { 4, 5, 6 };
   int n = sizeof(arr) / sizeof(arr[0]);
   int k = 5;
   cout << "Minimum operation required: " << countMinOp(arr, n, k);
}

输出结果

Minimum operation required: 2
 类似资料:
  • 本文向大家介绍C ++中最小K总和最短的子数组,包括了C ++中最小K总和最短的子数组的使用技巧和注意事项,需要的朋友参考一下 假设我们有一个数组A。我们必须找到A的最短,非空,连续子数组的长度,其总和至少为K。如果没有这样的子数组,则返回-1。 因此,如果输入类似于[5,3,-2,2,1]且k = 6,则输出将为2,如我们所见(5 + 3)> = 6 为了解决这个问题,我们将遵循以下步骤- n:

  • 本文向大家介绍转换数组,以使数组的GCD在C ++中变为1,包括了转换数组,以使数组的GCD在C ++中变为1的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将讨论一个程序来转换数组,以使数组的GCD变为1。 为此,我们将提供一个数组和一个正整数k。我们的任务是转换数组元素,以使元素的GCD为1,同时仅将数组元素除以k任意次,直到元素小于k。 示例 输出结果

  • 我需要找到总和大于或等于< code>k的最小子阵列长度。数组将只有正数。 例如 输入:< code>target = 7,< code>nums = [2,3,1,2,4,3]输出:2说明:子数组[4,3]在问题约束下长度最小。 在我的代码中,对于输入:< code>target = 7,< code>nums = [2,3,1,2,4,3]我得到的答案是< code>3,但正确答案是< cod

  • 给定一个数组,编写一个程序以在大小的所有子数组中找到最大 gcd 我的代码: 它是O(N^2),还能再优化吗?

  • NowCoder 解题思路 快速选择 复杂度:O(N) + O(1) 只有当允许修改数组元素时才可以使用 快速排序的 partition() 方法,会返回一个整数 j 使得 a[l..j-1] 小于等于 a[j],且 a[j+1..h] 大于等于 a[j],此时 a[j] 就是数组的第 j 大元素。可以利用这个特性找出数组的第 K 个元素,这种找第 K 个元素的算法称为快速选择算法。 // jav

  • 给你一个整数列表,长度为偶数。考虑这样一个操作,您在nums中选择任意数字,并用[1,max(nums)]之间的值更新它。返回所需的操作数,使得对于每个i,nums[i]+nums[n-1-i]等于相同的数。问题可以贪婪地解决。 注意:n是数组的大小,max(nums)是nums中的最大元素。 null 设i=0,nums[0]+nums[6-1-0]=4。 i=1,nums[1]+nums[6-