课堂练习之买书问题
2015-04-15 13:45
274 查看
一、题目
在节假日的时候,书店一般都会做促销活动。由于《哈利波特》系列相当畅销,店长决定通过促销活动来回馈读者。在销售的《哈利波特》平装本系列中,一共有五 卷,用编号0, 1, 2, 3, 4来表示。假设每一卷单独销售均需要8欧元。如果读者一次购买不同的两卷,就可以扣除5%的费用,三卷则更多。假设具体折扣的情况如下:
本数 折扣
2 5%
3 10%
4 20%
5 25%
在一份订单中,根据购买的卷数以及本书,就会出现可以应用不同折扣规则的情况。但是,一本书只会应用一个折扣规则。比如,读者一共买了两本卷一,一本卷二。那么,可以享受到5%的折扣。另外一本卷一则不能享受折扣。如果有多种折扣,希望能够计算出的总额尽可能的低。
要求根据这样的需求,设计出算法,能够计算出读者所购买一批书的最低价格。
二、思路分析
在小于5本的情况下,直接按折扣买就好了:
2 5%
3 10%
4 20%
5 25%
在大于5本的情况下,买法如下(对应折扣=本数*折扣):
本数 可能的分解本数 对应的折扣
6 =5+1 1.25
7 =5+2 1.35
8 =4+4 1.6
9 =5+4 2.05
10 =5+5 2.5
在大于10本的情况下,可以分解为以上小于10本的情况来计算。
设n为输入的书本数,当(n%5!=3)成立时,则对应上面的6,7,9三种折扣,当(n%5==3&&n!=3)成立时,则对应上面的8的折扣。
三、程序源码
四、运行截图
五、结论与体会
经过查阅资料,我知道了这个题目的算法是贪心算法,网上介绍了很多关于贪心算法,也有很多的类似题目,通过本次课堂练习,基本了解了这个题目的意思和解决办法,
但是,还是有很多地方需要自己去学习,希望以后能够写出更好的算法解决这类问题。
在节假日的时候,书店一般都会做促销活动。由于《哈利波特》系列相当畅销,店长决定通过促销活动来回馈读者。在销售的《哈利波特》平装本系列中,一共有五 卷,用编号0, 1, 2, 3, 4来表示。假设每一卷单独销售均需要8欧元。如果读者一次购买不同的两卷,就可以扣除5%的费用,三卷则更多。假设具体折扣的情况如下:
本数 折扣
2 5%
3 10%
4 20%
5 25%
在一份订单中,根据购买的卷数以及本书,就会出现可以应用不同折扣规则的情况。但是,一本书只会应用一个折扣规则。比如,读者一共买了两本卷一,一本卷二。那么,可以享受到5%的折扣。另外一本卷一则不能享受折扣。如果有多种折扣,希望能够计算出的总额尽可能的低。
要求根据这样的需求,设计出算法,能够计算出读者所购买一批书的最低价格。
二、思路分析
在小于5本的情况下,直接按折扣买就好了:
2 5%
3 10%
4 20%
5 25%
在大于5本的情况下,买法如下(对应折扣=本数*折扣):
本数 可能的分解本数 对应的折扣
6 =5+1 1.25
7 =5+2 1.35
8 =4+4 1.6
9 =5+4 2.05
10 =5+5 2.5
在大于10本的情况下,可以分解为以上小于10本的情况来计算。
设n为输入的书本数,当(n%5!=3)成立时,则对应上面的6,7,9三种折扣,当(n%5==3&&n!=3)成立时,则对应上面的8的折扣。
三、程序源码
#include<iostream.h> void main() { double b,sum; int a,i,c; cout<<"*********书店促销*********"<<endl; cout<<"****本数********折扣******"<<endl; cout<<"***** 2 ******** 5% ******"<<endl; cout<<"***** 3 ******** 10% ******"<<endl; cout<<"***** 4 ******** 20% ******"<<endl; cout<<"***** 5 ******** 25% ******"<<endl; cout<<"***************************"<<endl; cout<<"请输入要购买的书的数目:"; cin>>i; if(i%5!=3) { a=i/5; b=30*a; c=i%5; if(c==0) { sum=b; } if(c==1) { sum=b+8; } else if(c==2) { sum=b+16*0.95; } else if(c==3) { sum=b+24*0.9; } else if(c==4) { sum=b+32*0.8; } } else if(i==3) { sum=24*0.9; } else if(i%5==3&&i!=3) { a=i/5; b=30*(a-1); c=i%5; sum=b+32*0.8*2; } cout<<"最划算的价格为:"<<sum<<endl; }
四、运行截图
五、结论与体会
经过查阅资料,我知道了这个题目的算法是贪心算法,网上介绍了很多关于贪心算法,也有很多的类似题目,通过本次课堂练习,基本了解了这个题目的意思和解决办法,
但是,还是有很多地方需要自己去学习,希望以后能够写出更好的算法解决这类问题。
相关文章推荐
- 课堂练习:购买促销书籍问题
- 课堂练习-购书问题
- 课堂练习-购书问题
- 课堂练习-购书问题
- 课堂练习——买书问题
- 4月14号周二课堂练习:买书最优问题
- 软件工程课堂练习 图书折扣问题
- 2016年秋季-课堂练习1-Liz开发问题账户分析系统
- 4月17号周五课堂练习:电梯最优问题
- 课堂练习(卖书问题)
- 课堂练习——书店折扣问题
- 课堂练习之书费问题
- 课堂小练习(指针问题)
- 基础练习 2n皇后问题
- 蓝桥杯 BASIC-20 基础练习 数的读法 问题
- 平时代码练习----#prama pack、字符串的字节数问题
- Flash动画课堂教学的问题及改进措施
- 64.广搜练习跳马问题
- 代码练习系列:问题 A 又一版 A+B
- 递归--练习3--noi7592求最大公约数问题