信息学奥赛一本通(2059:【例3.11】买笔)
2059:【例3.11】買筆
時間限制: 1000 ms ??? ??? 內存限制: 65536 KB
提交數: 987 ??? 通過數: 458
【題目描述】
期末來臨了,班長小Q決定將剩余班費xx元錢,用于購買若干支鋼筆獎勵給一些學習好、表現好的同學。已知商店里有三種鋼筆,它們的單價為66元、55元和44元。小Q想買盡量多的筆(鼓勵盡量多的同學),同時他又不想有剩余錢。請您編一程序,幫小Q制訂出一種買筆的方案。
【輸入】
一個正整數xx(剩余班費)。
【輸出】
一行,依次為6元、5元和4元錢筆的數目,用一個空格隔開。
【輸入樣例】
10【輸出樣例】
1 0 1【分析】
? ? ? ? 對于以上的實際問題,要買盡量多的筆,易知都買4元的筆肯定可以買最多支筆。因此,最多可買的筆為x/4支。由于小Q要把錢用完,故我們可以按以下方法將錢用完:
? ? ? ? 若買完x/4支4元筆,還剩1元,則4元錢的筆少買1支,換成一支5元筆即可;若買完x/4元4元的筆,還剩2元,則4元的筆少買1支,換成一支6元筆即可;若買完x/4支4元錢的筆,還剩3元,則4元錢的筆少買2支,換成一支5元筆和一支6元筆即可。從以上對買筆方案的調整,可以看出筆的數目都是x/4,因此該方案的確為最優方案。
【參考代碼】
#include <stdio.h>
int main()
{
? ? int a,b,c;//abc分別代表6元,5元,4元的數目?
? ? int x,y; ?//x,y分別表示剩余班費和買完最多的4元筆后剩的錢
?? ??
? ? scanf("%d",&x);
? ? c=x/4;
? ? y=x%4;
? ? switch(y)
? ? {
? ? ?? ?case 0:
? ? ?? ??? ?a=0;
? ? ?? ??? ?b=0;
? ? ?? ??? ?break;
? ? ?? ?case 1:
? ? ?? ??? ?a=0;
? ? ?? ??? ?b=1;
? ? ?? ??? ?c--;
? ? ?? ??? ?break;
? ? ?? ?case 2:
? ? ?? ??? ?a=1;
? ? ?? ??? ?b=0;
? ? ?? ??? ?c--;
? ? ?? ??? ?break;
? ? ?? ?case 3:
? ? ?? ??? ?a=1;
? ? ?? ??? ?b=1;
? ? ?? ??? ?c-=2;
?? ?}
?? ?printf("%d %d %d\n",a,b,c);
? ??
? ? return 0;
}
http://ybt.ssoier.cn:8088/problem_show.php?pid=2059
?
總結
以上是生活随笔為你收集整理的信息学奥赛一本通(2059:【例3.11】买笔)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息学奥赛一本通(1189:Pell数列
- 下一篇: 信息学奥赛一本通(1226:装箱问题)