查找由数字字符串组成的数组的最大公约数 (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 的极好问题。
广告