LuoGu P1909 买铅笔???
題目描述
P老師需要去商店買n支鉛筆作為小朋友們參加NOIP的禮物。她發(fā)現(xiàn)商店一共有 3種包裝的鉛筆,不同包裝內(nèi)的鉛筆數(shù)量有可能不同,價(jià)格也有可能不同。為了公平起 見,P老師決定只買同一種包裝的鉛筆。
商店不允許將鉛筆的包裝拆開,因此P老師可能需要購買超過n支鉛筆才夠給小朋 友們發(fā)禮物。
現(xiàn)在P老師想知道,在商店每種包裝的數(shù)量都足夠的情況下,要買夠至少n支鉛筆*最少*需要花費(fèi)多少錢。
輸入格式:
輸入的第一行包含一個(gè)正整數(shù)n,表示需要的鉛筆數(shù)量。
接下來三行,每行用兩個(gè)正整數(shù)描述一種包裝的鉛筆:其中第一個(gè)整數(shù)表示這種 包裝內(nèi)鉛筆的數(shù)量,第二個(gè)整數(shù)表示這種包裝的價(jià)格。
保證所有的7個(gè)數(shù)都是不超過10000的正整數(shù)。
輸出格式:
輸出一行一個(gè)整數(shù),表示P老師最少需要花費(fèi)的錢。
鏈接?https://www.luogu.org/problemnew/show/1909
說實(shí)話吧,這個(gè)題確實(shí)不太想寫(大水題兒??居然還因?yàn)?x3fWA了一次。。。真是智障了@_@),可是機(jī)房的小伙伴居然有不會(huì)的。。。只能勉為其難了==
這個(gè)題確實(shí)沒太有什么難點(diǎn),就是學(xué)了幾個(gè)周的小伙伴都能有思路,一共有三種包裝,每一種包裝里都會(huì)包含一定數(shù)量的鉛筆,并有一定的價(jià)格,我們用n整除一下x,就會(huì)的到最少需要買這種包裝的數(shù)量,然后將n/x在乘上y(包裝的價(jià)格),就會(huì)得出只買這種包裝最少需要的錢,一共三次,取這三次的最小值即可。
?
1 #include<cstdio> 2 #include<iostream> 3 using namespace std; 4 int main() 5 { 6 int n,m,ans=0x3fffffff,x,y; 7 scanf("%d",&n); 8 for(int i=1;i<=3;i++){ 9 scanf("%d%d",&x,&y);//x表示每個(gè)包裝內(nèi)鉛筆的數(shù)量,y表示每個(gè)包裝的價(jià)格; 10 m=n/x; 11 ans=min(ans,m*y); 12 } 13 printf("%d\n",ans); 14 return 0; 15 } 點(diǎn)擊查看代碼?
但是,我們漏了一個(gè)很重要的地方,也就是說,上面的代碼是錯(cuò)誤的解法(想一下為什么)。
答案是:我們將 n/x (整除)將會(huì)的到下取整的答案,舉個(gè)例子吧,當(dāng)一共需要買 25(n) 只鉛筆時(shí),這種包裝每個(gè)單位中有包含 17(x) 支鉛筆,所以n/x會(huì)得到 1 而不是我們想要的 2 。但是如果是 n=25、x=5時(shí),我們恰好能得到我們想要的答案(n/x) 5 ,也就是說當(dāng)n能夠整除x時(shí) ?if(n%x==0),我們恰好能得到想要的答案,但 ?if(n%x!=0),我們會(huì)得到比想要的答案小 1 的結(jié)果,我們便需要將得到的 n/x ++。所以加上第二個(gè)if語句特判一下就可以完美的解決這個(gè)問題了!
?
1 #include<cstdio> 2 #include<iostream> 3 using namespace std; 4 int main() 5 { 6 int n,m,ans=0x3fffffff,x,y; 7 scanf("%d",&n); 8 for(int i=1;i<=3;i++){ 9 scanf("%d%d",&x,&y);//x表示每個(gè)包裝內(nèi)鉛筆的數(shù)量,y表示每個(gè)包裝的價(jià)格; 10 m=n/x; 11 if(n%x) m++; 12 ans=min(ans,m*y); 13 } 14 printf("%d\n",ans); 15 return 0; 16 } 這才是正確代碼==?
轉(zhuǎn)載于:https://www.cnblogs.com/RisingGods/p/8127275.html
總結(jié)
以上是生活随笔為你收集整理的LuoGu P1909 买铅笔???的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 博客转移至:www.bugsafe.cn
- 下一篇: PAT 1057. 数零壹