求三个数的最小公倍数的解法之美

从键盘上输入三个数,求其最小公倍数。

分析:最小公倍数是指能整除这三个数的公倍数中的最小者,可以利用循环穷举的方法,看是否能整除这三个数。若能整除这三个数,则输出其中的最小的数即为最小公倍数。

第一种方法:最常见的方法。
常见代码如下:
 

    #include<stdio.h>
int max(int a,int b,int c)  //自定义函数max
{
  if(a>b&&a>c)            // 若a的值最大
      return a;           // 返回a
  else if(b>a&&b>c)       // 若b的值最大
      return b;           // 返回b
  else
      return c;           //   否则返回c
}
void main()
{
  int x,y,z,i,j,k;
  printf("请输入三个数:");
  scanf("%d%d%d",&x,&y,&z); // 从键盘输入三个数
  k = max(x,y,z);          //调用max函数求出其中的最大值
  i= 1;
  1hile(1)                 //while循环,条件值为1
  { 
    j = k * i;
    if((j%x==0)&&(j%y==0)&&(j%z==0)) //满足条件,退出循环
        break;
    i++;
  }
  printf("最小公倍数为%d\n",j);
}

运行结果如下:

第二种方法:通过短除法实现。
短除法: 短除法思想为求三个数的因素,然后求这些因素的求积。算法设计代码如下:

 #include<stdio.h>
int max(int a,int b,int c)
{
  if(a>b&&b>c)
      return a;
  else if(b>a&&b>c)
      return b;
  else
      return c;
}
void main()
{
  int x,y,z,i,j,k,t=1;
  printf("请输入三个数:");
  scanf("%d%d%d",&x,&y,&z);
  k = max(x,y,z);
  for(i=2;i<=k;i++)
  {
    j = 1;
    while(j)
    {
      j=0;
      if(x%i==0)
      {
        x = x/i;
        j = 1;
      }
      if(y%i==0)
      {
        y = y/i;
        j = 1;
      }
      if(z%i==0)
      {
        z = z/i;
        j = 1;
      }
      if(j==1)
          t = t * i;
    }
    k = max(x,y,z);
  }
  printf("最小公倍数为:%d\n",t);
} 

运行结果如下:

代码分析:利用短除法求三个数的因子,然后求所有因子的乘积,即为最小公倍数,其中 j 作为循环是否进行的标志。
运行结果:该程序的执行结果与算法1 的结果一样。
第三种方法 : 求三个数的最小公倍数,可以先求两个数的最小公倍数,然后利用函数的嵌套求这三个数的最小公倍数。算法如下:
 

   #include<stdio.h>
int f(int x,int y)
{
  int a, b, c;
  a = x;
  b = y;
  c = x%y;
  while(c!=0)
  {
    x = y;
    y = c;
    c = x%y;
  }
  return a*b/y;
}
void main()
{
    int a , b , c , d;
    printf("请输入三个数:");
    scanf("%d%d%d",&a,&b,&c);
    d = f( f(a,b),c);          //嵌套调用函数f()求解
    printf("最小公倍数为:%d\n",d);
} 

运行结果如下:

 代码分析:第2~15行,自定义函数 f(),用来求两个数的最小公倍数,第21行,嵌套调用函数 f(),求得三个数的最小公倍数。
运行结果:该程序的执行结果与算法1和算法2 的结果一样。

发布了74 篇原创文章 · 获赞 146 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44350205/article/details/103870190