• c语言练习71: 找出数组的最⼤公约数


    找出数组的最⼤公约数

    题⽬描述:

    给你⼀个整数数组 nums ,返回数组中最⼤数和最⼩数的 最⼤公约数 。

    两个数的 最⼤公约数 是能够被两个数整除的最⼤正整数

    • ⽰例 1:

    输⼊:nums = [2,5,6,9,10]

    输出:2

    解释:

    nums 中最⼩的数是 2

    nums 中最⼤的数是 10

    2 和 10 的最⼤公约数是 2

    • ⽰例 3:

    输⼊:nums = [3,3]

    输出:3

    解释:

    nums 中最⼩的数是 3

    nums 中最⼤的数是 3

    3 和 3 的最⼤公约数是 3

    • 提⽰:

    2 <= nums.length <= 1000 1 <= nums[i] <= 1000

    算法思路:

    1. 定义两个变量 max 和 min 分别记录最⼤值和最⼩值,将其初始化为数组中第⼀个数;

    2. 遍历数组,更新最⼤值和最⼩值;

    3. 以最⼩值为上限,1为下限从⼤到⼩遍历每个整数;

    4. 当遍历到某个数可以同时整除两个最值时,返回此值;

    5. 因为不是每个路径都有返回值,编译器会报错,因此在函数最后需返回⼀个与函数返回值类型对 应的值。

    1. int findGCD(int* num, int numSize)
    2. {
    3. int i = 0;
    4. //假设第⼀个数就是最⼤
    5. int max = *num;
    6. //假设第⼀个数就是最⼤
    7. int min = *num;
    8. //找出数组最⼤值和最⼩值
    9. for (i = 0; i < numSize; i++) {
    10. if (max < num[i])
    11. max = num[i];
    12. if (min > num[i])
    13. min = num[i];
    14. }
    15. //遍历求最⼤公约数
    16. for (i = min; i >= 1; i--) {
    17. if (max % i == 0 && min % i == 0) {
    18. return i;
    19. }
    20. }
    21. //防⽌编译错误
    22. return -1;
    23. }

    算法思路:

    1. 定义两个变量 max 和 min 分别记录最⼤值和最⼩值,将其初始化为数组中第⼀个数;

    2. 遍历数组,更新最⼤值和最⼩值;

    3. 利⽤辗转相除法求出最⼤公约数 n ;

    4. 返回最⼤公约数 n 。

    1. //辗转相除法循环实现
    2. int gcd(int max, int min) {
    3. int r = 0;
    4. //当最⼩值不能整除最⼤值,即r≠0,更新两个最值重复步骤
    5. while (r = max % min) {
    6. max = min;
    7. min = r;
    8. }
    9. //当前最⼩值即为原数最⼤公约数
    10. return min;
    11. }
    12. //辗转相除法递归实现
    13. int gcd2(int a, int b) {
    14. //特判最⼩值为0时的情况
    15. if (b == 0) {
    16. return a;
    17. }
    18. //返回b和r的最⼤公约数
    19. return gcd(b, a % b);
    20. }
    21. int findGCD(int* nums, int numsSize) {
    22. int i = 0;
    23. int max = *nums;//假设第⼀个数就是最⼤
    24. int min = *nums;//假设第⼀个数就是最⼩
    25. //找出数组最⼤值和最⼩值
    26. for (i = 1; i < numsSize; i++)
    27. {
    28. if (max < nums[i])
    29. max = nums[i];
    30. if (min > nums[i])
    31. min = nums[i];
    32. }
    33. //求最⼤公约数
    34. int n = gcd(max, min);
    35. return n;
    36. }

  • 相关阅读:
    【代码随想录day24】不同的二叉搜索树
    请回答数据结构-【并查集&LRUCache】
    17.Nacos与Eureka区别
    使用Flink接受kafka中的数据并对数据进行ETL
    大数据之Hudi数据湖_基本概念_时间轴_TimeLine---大数据之Hudi数据湖工作笔记0005
    开源国内镜像站 操作系统、中间件、开发环境
    Django笔记三十二之session登录验证操作
    MySQL——进阶
    行业追踪,2023-10-09
    C++学习笔记(二十五)
  • 原文地址:https://blog.csdn.net/2301_77479435/article/details/133418377