期末来临了,班长小Q决定将剩余班费X元钱,用于购买若干支钢笔奖励给一些学习好、表现好的同学。已知商店里有三种钢笔,它们的单价为6元、5元和4元。小Q想买尽量多的笔(鼓励尽量多的同学),同时他又不想有剩余钱。请您编一程序,帮小Q制订出一种买笔的方案。
问题分析:
对于以上的实际问题,要买尽量多的笔,易知都买4元的笔肯定可以买最多支笔。因此最多可买的笔为x div 4支。由于小q要把钱用完,故我们可以按以下方法将钱用完:
若买完x div 4支4元钱的笔,还剩1元,则4元钱的笔少买1支,换成一支5元笔即可;若买完x div 4支4元钱的笔,还剩2元,则4元钱的笔少买1支,换成一支6元笔即可;若买完x div 4支4元钱的笔,还剩3元,则4元钱的笔少买2支,换成一支5元笔和一支6元笔即可。
从以上对买笔方案的调整,可以看出笔的数目都是x div 4,因此该方案的确为最优方案。
程序代码:
#include
using namespace std;
int main()
{
int a,b,c,x,y;
//a,b,c分别表示在买笔方案中,6元、5元和4元钱笔的数目
//x,y分别表示剩余班费和买完最多的4元笔后剩的钱
cin>>x; //输入x
c=x/4; //4元笔最多买的数目
y=x%4; //求买完c支4元笔后剩余的钱数y
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; break;
}
cout<
return 0;
}