这是一道OJ上的题目:小慧过生日,小明(小明真忙)要买鲜花送她。每枝红玫瑰(过生日送玫瑰,老贺不懂合适不合适)5元,满5支送1枝,满20枝送5枝。小明一共有n(n>10)元钱,最多能买到多少?
样例输入:135
样例输出:33
不少同学做不出来。今天一位同学问我,那就分析一下。
其中看不懂这个规则的同学不少,快找人需要送花的人,享受一下购物优惠吧。
以样例说事,33枝是怎么来的?
5元一支,135元能买27支。他这样买:先买20支,这时赠5支,再买7支,还能再送1支,这样就能达到33支了。
于是,先尽可能享受买20赠5的优惠,再看享受买5赠1的优惠。这是贪心法的思维。
写出下面的代码:
#include<iostream> using namespace std; int main() { int money, n, z1, z2; cin>>money; n=money/5; //实际能买的玫瑰 z1=n/20*5; //买够20就能送5支 z2=(n-(n/20)*20)/5; //不够买20赠5的,享受买5赠1的 cout<<n+z1+z2<<endl; return 0; }
分享在QQ群,不少同学大呼用了不少if语句嵌套着做,错误提交了很多次,不想就几个表达式搞定了。
其实,思路顺了再动手。不要把问题搞复杂了。
时间: 2024-10-21 14:46:52