一.题目及要求
题目:
书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元,
具体折扣如下所示: 本数 折扣 2本 5%
3本 10%
4本 20%
5本 25%
要求:
根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。 设计算法能够计算出读者购买一批书的最低价格。
二.设计思路
1).若<=5,最理想的状态是这几本书都不一样,直接按对应的折扣购买就可以
2).若6<=x<=9,理想状态是里面每个类别最多有两本重复的,分别计算6,7,8,9时,书的最低价格。
3).若>=10,和2)的情况重复
三.源代码
// Test_sale.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include<stdio.h> #include<iostream.h> float discount_2(int number)//当数量在6到10 之间时 { float sum; switch(number) { case 6: sum=38; break; case 7: sum=45.2; break; case 8: sum=51.2; break; case 9: sum=55.5; break; case 10: sum=60; break; default:cout<<"ERROR!!!"<<endl; } return sum; } float discount_3(int number) //当数量大于10时 { int remainder,itg; //remainder是余数,itg是整数 float sum; remainder=5+number%5; //将数量分成两部分,一部分是5+number%5 itg=number/5-1; //一部分是number/5-1 sum=discount_2(remainder); //第一部分调用discount_2函数 sum=sum+itg*30; //另一部分直接按整套价格计算 return sum; } float sale(int number) { float sum; if(number<=5) //当数量小于6本时 { switch(number) { case 1: sum=8; break; case 2: sum=2*8*0.95; break; case 3: sum=3*8*0.9; break; case 4: sum=4*8*0.8; break; case 5: sum=5*8*0.75; break; default: cout<<"ERROR!!!"<<endl; } } else if(number<=10) //当数量在5到10之间时 { sum=discount_2(number); } else //当数量大于10本时 sum=discount_3(number); return sum; } int main() { int sale_number,flag=1; float sum; while(flag==1) { cout<<"请输入要购买的书的数量:"; cin>>sale_number; sum=sale(sale_number); //调用买书的最佳算法 cout<<"最低的价格是"<<sum<<endl; cout<<"是否继续使用(是/1,否/0):"; cin>>flag; } return 0; }
四.结果及截图