zoukankan      html  css  js  c++  java
  • 核桃的数量

    一、题目分析

      这道题目意思很容易明白,解题方法也很简单,就是求三个整数(三个小组的加班人数)的最小公倍数。

    二、最小公倍数介绍

      最小公倍数(Least Common Multiple,缩写 L.C.M.),如果有一个自然数 a 能被自然数 b 整除,则称 a 为 b 的倍数,b 为 a 的因数,对于两个整数来说,指该两数共有倍数中最小的一个。

      计算最小公倍数时,通常会借助最大公约数来辅助计算,计算公式如下:

    最小公倍数 = 两数的乘积 / 最大公约(因)数

    三、最大公约(因)数介绍

      最大公约数,也称最大公因数、最大公因子,指两个或多个整数共有约数中最大的一个。a,b 的最大公约数记为 (a,b),同样的,a,b,c 的最大公约数记为 (a,b,c) ,多个整数的最大公约数也有同样的记号。求最大公约数有多种方法,常见的有质因数分解法、短除法、辗转相除法、更相减损法。本题我使用的是辗转相除法,下面详细介绍这个算法:

      设两数为 a、b(a>b),使用辗转相除法求 a 和 b 最大公约数 (a,b) 的步骤如下:

    1. 用 a 除 b,得 a÷b=q......r(0≤r);
    2. 若 r=0,则 (a,b)=b;
    3. 若 r≠0,则令 a=b,b=r,返回第一步。

      实现该算法的程序设计如下:

     1 /*********************************************************************************************************
     2 ** 函数功能 :得到两个整数的最小公倍数 
     3 ** 函数说明 :最小公倍数 = 两数的乘积 / 最大公约(因)数,使用辗转相除法求两个整数的最大公约数
     4 ** 入口参数 :a,b;两个整数 
     5 ** 出口参数 :两个整数的最小公倍数 
     6 *********************************************************************************************************/
     7 int GreatestCommonDivisor(int a,int b)
     8 {
     9     return a%b==0?b:GreatestCommonDivisor(b,a%b); //辗转相除法 
    10 }

    四、算法设计

      先求 a 和 b 的最小公倍数 ab,再求 ab 和 c 的最小公倍数 abc。

    五、程序设计

     1 #include<iostream>
     2 
     3 using namespace std;
     4 
     5 //函数声明 
     6 int GreatestCommonDivisor(int a,int b); //得到两个整数的最小公倍数  
     7 
     8 //主函数 
     9 int main()
    10 {
    11     int a,b,c; //分别用于记录三个小组加班的人数
    12     cin>>a>>b>>c; //输入三个整数(三个小组加班的人数) 
    13     
    14     int ab,abc; //ab:a 和 b 的最小公倍数;abc:ab 和 c 的最小公倍数 
    15     ab=a*b/GreatestCommonDivisor(a,b); //得到a 和 b 的最小公倍数
    16     abc=ab*c/GreatestCommonDivisor(ab,c); //得到 ab 和 c 的最小公倍数
    17     
    18     cout<<abc; //输出三个整数的最小公倍数(每袋核桃的数量) 
    19     
    20     return 0;
    21 }
    22 
    23 /*********************************************************************************************************
    24 ** 函数功能 :得到两个整数的最小公倍数 
    25 ** 函数说明 :最小公倍数 = 两数的乘积 / 最大公约(因)数,使用辗转相除法求两个整数的最大公约数
    26 ** 入口参数 :a,b;两个整数 
    27 ** 出口参数 :两个整数的最小公倍数 
    28 *********************************************************************************************************/
    29 int GreatestCommonDivisor(int a,int b)
    30 {
    31     return a%b==0?b:GreatestCommonDivisor(b,a%b); //辗转相除法 
    32 }

     

  • 相关阅读:
    页面性能优化的简单介绍
    JavaScript基础介绍
    迅雷/快车/旋风地址转换器
    关于 API 中返回字串的一些问题
    将文件夹映射为驱动器的工具
    BCB/Delphi2007 隐藏任务栏图标
    所有小工具
    oracle ora01033和ora00600错误
    批量更改文件名的批处理文件
    替代Windows运行功能的工具FastRun
  • 原文地址:https://www.cnblogs.com/LeoFeng/p/4357336.html
Copyright © 2011-2022 走看看