三齿轮问题:三个齿轮啮合

描述

如图在齿轮箱里三个齿轮互相衔接,某瞬间两对齿相遇,问各转多少圈后,这两对齿同时重逢。

输入

输入数据有多组,每组数据一行,每行为3个数a,b,c,分别代表三个齿轮的齿数(均为正整数)。数与数之间用空格隔开。当a,b,c中有一个为0时,输入结束。

输出

输出每组数据中,每个齿轮所转的圈数,用空格隔开。

样例输入

1 1 1
2 2 2
0 0 0

样例输出

1 1 1
1 1 1
方法1:
#include
#include
#include
#include
#include
#include
using namespace std;
int max_public_num(int s1,int s2)
{
    if(s1
#include 
#include 
using namespace std;

int main()
{
    int a[3],b[3];
   // int x,y,z;
    int k,s,i;
    while(cin>>a[0]>>a[1]>>a[2])
    {
        b[0]=a[0];b[1]=a[1];b[2]=a[2];
        if(a[0]==0 || a[1]==0 || a[2]==0)
        {break;}
      sort(a,a+3);
      s=a[0]*a[1]*a[2];
      k=a[2];
      for(i=k;i
这道题初看起来没有头绪,但是只要好好想想就知道了,其实就是求三个数的最小公约数,三个齿轮的个数其实就是那个齿轮的周长,要三个齿轮再次相遇,也就是求三个数的最小公约数,只要想明白了这一点这道题就很容易了,
我用了两种方法来求,第一种是递归,先求出两个数的最小公约数,再两两相求,第二种就是直接求,找到三个数中最大的一个和这三个数的乘积,作为for循环的边界,依次枚举,找到最小公约数。

你可能感兴趣的:(三齿轮问题:三个齿轮啮合)