【题目描述】
期末来临了,班长小Q决定将剩余班费x元钱,用于购买若干支钢笔奖励给一些学习好、表现好的同学。已知商店里有三种钢笔,它们的单价为6元、5元和4元。小Q想买尽量多的笔(鼓励尽量多的同学),同时他又不想有剩余钱。请您编一程序,帮小Q制订出一种买笔的方案。
【输入】
一个正整数xx(剩余班费)。
【输出】
一行,依次为6元、5元和4元钱笔的数目,用一个空格隔开。
【输入样例】
10
【输出样例】
1 0 1
解法一:
#include <iostream>
using namespace std;
int main()
{
int x,six=0,five=0,four=0,remain;
cin>>x;
four=x/4; //最多能买多少支4元的笔
remain=x%4;//剩下的钱
switch(remain)
{
case 1:four--;five++;break;
case 2:four--;six++;break;
case 3:four-=2,six++,five++;break; //将一支4元的笔加一元换成5元的笔,将另一支4元的笔加2元换成3元的笔
}
cout<<six<<" "<<five<<" "<<four;
return 0;
}
解法二:
#include <iostream>
using namespace std;
int main()
{
int x,six=0,five=0,four=0;
cin>>x;
while(true)
{
if(x==11) //5,6组合
{
six++;five++;break;
}
else if(x==10) //4,6组合或 5,5组合
{
six++;four++;break;
}
else if(x==9) //4,5组合
{
five++;four++;break;
}
else
{
if(x-6==0) //因为不允许有剩余钱,则先让查找单价最大的是否书恰好够买一支笔
{
x-=6;
six++;
}
else if(x-5==0)
{
x-=5;
five++;
}
else
{
x-=4;
four++;
}
}
if(x==0)
break;
}
cout<<six<<" "<<five<<" "<<four;
return 0;
}