1. 程式人生 > 實用技巧 >ACM題目1446: [2013年第四屆真題]核桃的數量

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\n",add);	
            break;
		} 
    }
    return 0;
}

 暴力破除法雖然可以 但是要考慮到時間複雜度的影響