1. 程式人生 > >NOIP2016普及組第一題——買鉛筆

NOIP2016普及組第一題——買鉛筆

SSL 2591

洛谷 P1909 買鉛筆

題目描述

P老師需要去商店買n支鉛筆作為小朋友們參加NOIP的禮物。她發現商店一共有3種包裝的鉛筆,不同包裝內的鉛筆數量有可能不同,價格也有可能不同。為了公平起見,P老師決定只買同一種包裝的鉛筆。商店不允許將鉛筆的包裝拆開,因此P老師可能需要購買超過n支鉛筆才夠給小朋友們發禮物。現在P老師想知道,在商店每種包裝的數量都足夠的情況下,要買夠至少n支鉛筆最少需要花費多少錢。

var 
  n,i,money,num,min,s:longint;
begin
  readln(n);
  for i:=1 to 3 do
   begin
     readln(num,money);
     if n mod num=0 then
      s:=(n div num)*money
     else
      s:=(n div num+1)*money;
     if (s<min)or(i=1) then min:=s;
   end;
  writeln(min);
end.

在程式中,money即每袋鉛筆的價格,num是有每袋多少鉛筆。

於是得出這樣一個模型:n(所需鉛筆數)除以num

但顯然能看出,這個對於n不是num的倍數的情況不管用,所以加入非倍數情況:

num對n求餘,若餘數為零則正常執行,若餘數不為零則需要多買一袋。

最後,將購買每袋鉛筆以使鉛筆數量達到n的錢數記起來,判斷,若這錢數比之前的少,則放入,最後輸出最小值。以上就是關於NOIP2016普及組第一題的題解。