查找由数字字符串组成的数组的最大公约数 (GCD)


在本文中,我们将深入探讨一个与数组和字符串操作相关的有趣问题。我们今天要研究的问题是“查找由数字字符串组成的数组的最大公约数 (GCD)”。这个问题是磨练您在字符串操作、数组和数论方面技能的好方法。

问题陈述

给定一个字符串数组,其中每个字符串表示一个正整数,我们的任务是找到所有这些整数的最大公约数 (GCD)。

方法

我们将每个字符串转换为整数,并计算所有这些整数的 GCD。为了计算 GCD,我们可以使用欧几里得算法,这是一种有效查找两个数的 GCD 的方法。

示例

以下是解决问题的程序:

#include <stdio.h>
#include <stdlib.h>

// Function to calculate the greatest common divisor (GCD) using Euclidean algorithm
int gcd(int a, int b) {
   if (b == 0) {
      return a;
   }
   return gcd(b, a % b);
}

// Function to find the GCD of an array of integers
int findGCD(int arr[], int size) {
   int result = arr[0];
    
   // Loop through the array and update the GCD with each element
   for (int i = 1; i < size; i++) {
      result = gcd(result, arr[i]);
   }
    
   return result;
}

int main() {
   int arr[] = {42, 84, 126, 168};
   int size = sizeof(arr) / sizeof(arr[0]);
   int result = findGCD(arr, size);
   printf("The GCD of the array is: %d\n", result);
   return 0;
}

输出

The GCD of the array is: 42
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;

int gcd(int a, int b) {
   if (b == 0) {
      return a;
   }
   return gcd(b, a % b);
}

int findGCD(vector<string>& arr) {
   int result = stoi(arr[0]);
   
   for(int i = 1; i < arr.size(); i++) {
      result = gcd(result, stoi(arr[i]));
   }
   
   return result;
}

int main() {
   vector<string> arr = {"42", "84", "126", "168"};
   int result = findGCD(arr);
   cout << "The GCD of the array is: " << result << endl;
   return 0;
}

输出

The GCD of the array is: 42
import java.util.Arrays;

public class GCDProgram {
   // Function to calculate the greatest common divisor (GCD) using Euclidean algorithm
   public static int gcd(int a, int b) {
      if (b == 0) {
         return a;
      }
      return gcd(b, a % b);
   }
   // Function to find the GCD of an array of integers
   public static int findGCD(int[] arr) {
      int result = arr[0];

      // Loop through the array and update the GCD with each element
      for (int i = 1; i < arr.length; i++) {
         result = gcd(result, arr[i]);
      }

      return result;
   }

   public static void main(String[] args) {
      int[] arr = {42, 84, 126, 168};
      int result = findGCD(arr);
      System.out.println("The GCD of the array is: " + result);
   }
}

输出

The GCD of the array is: 42
# Function to calculate the greatest common divisor (GCD) using Euclidean algorithm
def gcd(a, b):
   if b == 0:
      return a
   return gcd(b, a % b)

# Function to find the GCD of a list of integers
def find_gcd(arr):
   result = int(arr[0])
    
   # Loop through the list and update the GCD with each element
   for i in range(1, len(arr)):
      result = gcd(result, int(arr[i]))
    
   return result

if __name__ == "__main__":
   arr = ["42", "84", "126", "168"]
   result = find_gcd(arr)
   print("The GCD of the array is:", result)

输出

The GCD of the array is: 42

带测试用例的解释

让我们取字符串数组 {"42", "84", "126", "168"}。

当我们将此数组传递给 findGCD 函数时,它首先将第一个字符串转换为整数,并将其存储在 result 变量中。

然后它迭代其余的数组,将每个字符串转换为整数,并将 result 更新为 result 和当前整数的 GCD。

对于给定的数组,所有整数的 GCD 是 42。因此,函数将返回 42。

结论

这个问题演示了我们如何操作字符串并使用数论来解决 C++ 中的复杂问题。这是一个练习您的 C++ 编码技能并了解欧几里得算法以查找两个数的 GCD 的极好问题。

更新于:2023年10月20日

浏览量:354

开启你的职业生涯

完成课程获得认证

开始
广告