标签:
一、设计思路
题目要求:
书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元, 具体折扣如下所示: 本数 折扣
2 5%
3 10%
4 20%
5 25%
根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。
设计算法能够计算出读者购买一批书的最低价格。
设计思想:
按照此打折规则中,1本不打折,2-5本的时候根据对应的折扣规则来购买,在5本以上的时候,可以对应的转化为买5,6,7,8,9本书来计算,对应的优惠方案和价格如下:
当购书数量恰好为5的倍数时,统一的七五折计算;
当购书数量为6时,优惠方案为1+5,总价为:38;
当购书数量为7时,优惠方案为2+5,总价为:45.2;
当购书数量为8时,优惠方案为4+3,总价为:51.2;
当购书数量为9时,优惠方案为4+5,总价为:55.6;
在购书的数量大于5本的范围内,例如买书13本,优惠方案为5+8本;买44本书时,优惠方案为35+9本,此时是最佳的购书方案。
二、程序源代码
1 // maishu.cpp : Defines the entry point for the console application.
2 //
3
4 #include "stdafx.h"
5 #include "iostream.h"
6
7 double add(int number)
8 {
9 int m;
10 double sum;
11 m = number % 5 + 5;
12 switch(m)
13 {
14 case 6://买6本书(5+1)
15 sum = 38;
16 break;
17 case 7://买7本书(5+2)
18 sum = 45.2;
19 break;
20 case 8://买8本书(4+4)
21 sum = 51.2;
22 break;
23 case 9://买9本书(4+5)
24 sum = 55.6;
25 break;
26 case 5://买5本书(5)
27 sum = 30;
28 break;
29 }
30 return sum;
31 }
32 int main(int argc, char* argv[])
33 {
34 double sum = 0,d; //sum表示购买书的总价
35 int number,a, b, c; //number表示购买的书的数量
36 //a = number / 5,b = 30 * (a - 1),d为一个中间变量
37 int xuanze;
38 cout<<"购买数量:";
39 cin>>number;
40 if(number <= 0)
41 {
42 cout<<"输入错误!"<<endl;
43 return 0;
44 }
45 else if (number <= 5)
46 {
47 switch(number)
48 {
49 case 1:
50 sum = 8;
51 break;
52 case 2:
53 sum = 8*2*0.95;
54 break;
55 case 3:
56 sum = 8*3*0.9;
57 break;
58 case 4:
59 sum = 8*4*0.8;
60 break;
61 case 5:
62 sum = 8*5*0.75;
63 break;
64 }
65 }
66 else
67 {
68 a = number / 5;
69 b = 30 * (a - 1);
70 d = add(number);
71 sum = b + d;
72 }
73 cout<<"支付金额:"<<sum<<endl;
74 return 0;
75 }
三、运行结果截屏
四、总计与心得
在本次求最优惠的买书价格的程序设计中,我针对题意用上了枚举的方式直接给出了买6,7,8,9本书时的最优惠的总价钱,并没有用一定的算法来实现这个求解过程,虽达到了最后的目的,但是当打折方案改变时,也就不适用了,有待改进。
标签:
原文地址:http://www.cnblogs.com/mudanhuakai/p/4429197.html