项目3:如何买玫瑰?
一,题目要求:
小慧过生日,小明(小明真忙)要买鲜花送她。
每枝红玫瑰5元,满5支送1枝,满20枝送5枝。
小明一共有n(n>10)元钱,最多能买到多少?
样例输入:135
样例输出:33
二,题目分析:
1,定义int类型的变量存储输入钱数x,定义int类型变量a存储能买到的花。
2,x/5为能够买到的花的个数。
3,如果个数小于5,则不赠送。
4,如果个数大于5小于20,则送1支。
5,如果个数大于20,则送5支。
三,编程:
#include<stdio.h>
void main()
{
int x ;
int n;
int z1;
int z2;
printf("Please input your money:\n");
scanf("%d", &x);
n = x / 5;
z1 = n / 20 * 5;
z2 = (n - n / 20 * 20) / 5;
printf("%d", n+z1+z2);
}
四,验证
五,心得:
对于这个题我想简单了,以为是前面的分段来求解,其实不是这样。
贺老师说这是一种贪心算法,对于超过20的会有一个增量,对于超过5的会有一个增量。
先去满足超过20的增量,比如我买107朵花,先去除以20,得到可以活动5次赠送5朵花的机会。
在这个基础上,还有7朵花,再去除以5,得到1次赠送1朵花的机会。