ACM题目1446: [2013年第四届真题]核桃的数量

题目描述
小张是软件项目经理,他带领3个开发组。工期紧,今天都在加班呢。为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑)。他的要求是: 
1.  各组的核桃数量必须相同 
2.  各组内必须能平分核桃(当然是不能打碎的) 
3.  尽量提供满足1,2条件的最小数量(节约闹革命嘛) 

输入
输入包含三个正整数a,  b,  c,表示每个组正在加班的人数,用空格分开(a,b,c< 30)  
输出
输出一个正整数,表示每袋核桃的数量。
样例输入
2 4 5
样例输出
20
这个题目就是一个求三个数字的最小公倍数的题目
但是我的做法不具有普适性
只有部分测试用例可以通过
不知道什么原因
先把代码贴在下面
周末在研究一下
#include<stdio.h>
int main()
{
    int a,b,c;
    scanf("%d%d%d",&a,&b,&c);
    int temp;
    int add=0;
    for(int i=0;i<a*b*c;i++)
    {
        if(a<b)//交换ab的值使a最大
        {
        temp=a;
        a=b;
        b=temp;
        }
       if(b<c)//交换bc的值使b最大
       {
        temp=c;
        c=b;
        b=temp;
        }
        if(a<c)//交换bc的值使b最大
        {
        temp=c;
        c=a;
        a=temp;
        }//目前的排序是a>b>c
        if(a%b==0)//接下来的工作是求最小公倍数 
        {
        add=a/b;
        }
        else
        {
        add=a*b;
        }
        if(add%c==0)
        {
        add=add;
        }
        else
        {
        add=add*c;
        }
        
    }
    printf("%d",add);
    return 0;
    
   
    
}

  正确的代码是使用暴力破除的方法 遍历然后找到最小公倍数

#include<stdio.h>
int main()
{
    int a,b,c;
    scanf("%d%d%d",&a,&b,&c);
    for(int add=1;;add++)
    {
        if((add%a==0)&&(add%b==0)&&(add%c==0))//当add可以同时被三个数整除时输出结果 
        {
            printf("%d
",add);	
            break;
		} 
    }
    return 0;
} 

 暴力破除法虽然可以 但是要考虑到时间复杂度的影响

 
原文地址:https://www.cnblogs.com/redzzy/p/13693802.html