ACM題目1446: [2013年第四屆真題]核桃的數量
阿新 • • 發佈:2020-09-19
題目描述
小張是軟體專案經理,他帶領3個開發組。工期緊,今天都在加班呢。為鼓舞士氣,小張打算給每個組發一袋核桃(據傳言能補腦)。他的要求是:
1. 各組的核桃數量必須相同
2. 各組內必須能平分核桃(當然是不能打碎的)
3. 儘量提供滿足1,2條件的最小數量(節約鬧革命嘛)
輸入 輸入包含三個正整數a, b, c,表示每個組正在加班的人數,用空格分開(a,b,c< 30) 輸出 輸出一個正整數,表示每袋核桃的數量。 樣例輸入
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; }
暴力破除法雖然可以 但是要考慮到時間複雜度的影響