參加考試的時候,第一題我足足花了四十多分鐘(因為那奇葩的鍵盤,幸好我向老師報告更換了鍵盤),還是只得了五十分。。。
題目描述:
p老師需要去商店買n支鉛筆作為小朋友們參加noip的禮物。她發現商店一共有 3種包裝的鉛筆,不同包裝內的鉛筆數量有可能不同,**也有可能不同。為了公平起 見,p老師決定只買同一種包裝的鉛筆。
商店不允許將鉛筆的包裝拆開,因此p老師可能需要購買超過n支鉛筆才夠給小朋 友們發禮物。
現在p老師想知道,在商店每種包裝的數量都足夠的情況下,要買夠至少n支鉛筆最少需要花費多少錢。
然後貼一下50分**:
#include
#include
#include
#include
#include
using
namespace
std;
int n,p[4],v[4],ans[4];
int main()
for(int i=1;i<=3;i++)
ans[0]=min(ans[1],ans[2]);
ans[0]=min(ans[0],ans[3]);
printf("%d\n",ans[0]);
return
0;}
這題是簡單的數學計算,然後比較最小值。
出錯的地方是ans[i]=int(double(n)/p[i]+1)*v[i];
這一句上。
我的想法是讓n/p[i]
得到的值是小數字補足進1的。而真正的int和int相除的得數是預設捨去小數為的,與自動補足進1相反。所以我搗鼓了半天,樣例資料過了,還是沒有拿到滿分。
而真正的進1補滿方法是
if(n%p[i]==0) ans[i]=(n/p[i])*v[i];
else ans[i]=(n/p[i]+1)*v[i];
貼上滿分**:
#include
#include
#include
#include
#include
using
namespace
std;
int n,p[4],v[4],ans[4];
int main()
for(int i=1;i<=3;i++)
ans[0]=min(ans[1],ans[2]);
ans[0]=min(ans[0],ans[3]);
printf("%d\n",ans[0]);
return
0;}
NOIP2016普及組第一題 買鉛筆
ssl 2591 洛谷 p1909 買鉛筆 題目描述 p老師需要去商店買n支鉛筆作為小朋友們參加noip的禮物。她發現商店一共有3種包裝的鉛筆,不同包裝內的鉛筆數量有可能不同,也有可能不同。為了公平起見,p老師決定只買同一種包裝的鉛筆。商店不允許將鉛筆的包裝拆開,因此p老師可能需要購買超過n支鉛筆才...
買鉛筆(NOIP2016 普及組第一題)
p老師需要去商店買n支鉛筆作為小朋友們參加noip的禮物。她發現商店一共有3種包裝的鉛筆,不同包裝內的鉛筆數量有可能不同,也有可能不同。為了公平起見,p老師決定只買同一種包裝的鉛筆。商店不允許將鉛筆的包裝拆開,因此p老師可能需要購買超過n支鉛筆才夠給小朋友們發禮物。現在p老師想知道,在商店每種包裝的...
NOIP2016普及組複賽第1題 買鉛筆
題目描述 p老師需要去商店買n支鉛筆作為小朋友們參加noip的禮物。她發現商店一共有3種包裝的鉛筆,不同包裝內的鉛筆數量有可能不同,也有可能不同。為了公平起 見,p老師決定只買同一種包裝的鉛筆。商店不允許將鉛筆的包裝拆開,因此p老師可能需要購買超過n支鉛筆才夠給小朋 友們發禮物。現在p老師想知道,在...