#127-[庫函式]買鉛筆
阿新 • • 發佈:2018-12-16
Description
P老師需要去商店買n支鉛筆作為小朋友們參加NOIP的禮物。她發現商店一共有 3種包裝的鉛筆,不同包裝內的鉛筆數量有可能不同,價格也有可能不同。為了公平起 見,P老師決定只買同一種包裝的鉛筆。
商店不允許將鉛筆的包裝拆開,因此P老師可能需要購買超過n支鉛筆才夠給小朋友們發禮物。
現在P老師想知道,在商店每種包裝的數量都足夠的情況下,要買夠至少n支鉛筆最少需要花費多少錢。
Input
第一行包含一個正整數n,表示需要的鉛筆數量。
接下來三行,每行用2個正整數描述一種包裝的鉛筆:其中第1個整數表示這種 包裝內鉛筆的數量,第2個整數表示這種包裝的價格。
保證所有的77個數都是不超過10000的正整數。
Output
1個整數,表示P老師最少需要花費的錢。
Sample Input
57
2 2
50 30
30 27
Sample Output
54 89991 【說明】 鉛筆的三種包裝分別是: 2支裝,價格為2; 50支裝,價格為30; 30支裝,價格為27。 P老師需要購買至少57支鉛筆。 如果她選擇購買第一種包裝,那麼她需要購買29份,共計2×29=58支,需要花費的錢為2×29=58。 實際上,P老師會選擇購買第三種包裝,這樣需要買2份。雖然最後買到的鉛筆數量更多了,為30×2=60支,但花費卻減少為7×2=54,比第一種少。 對於第二種包裝,雖然每支鉛筆的價格是最低的,但要夠發必須買2份,實際的花費達到了30×2=60,因此P老師也不會選擇。 所以最後輸出的答案是54。
直接一個ceil()完事.
// 很水的...... #include <iostream> #include <cmath> using namespace std; int main(void) { int n, x1, y1, x2, y2, x3, y3, res1, res2, res3; scanf("%d%d%d%d%d%d%d", &n, &x1, &y1, &x2, &y2, &x3, &y3); res1 = ceil(n / double (x1)) * y1; // 第一種鉛筆的花費 res2 = ceil(n / double (x2)) * y2; // 第二種鉛筆的花費 res3 = ceil(n / double (x3)) * y3; // 第三種鉛筆的花費 printf("%d", min(res1, min(res2, res3))); // 輸出最小花費 return 0; }