软件工程课堂训练————最便宜购书方案
一·实验题目:
某书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元,具体折扣如下所示:
本数 折扣
2 5%
3 10%
4 20%
5 25%
根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。设计算法能够计算出读者购买一批书的最低价格。
二·实验思路:
通过计算 算出6~10本分别的价钱,8本例外。因为8本分为4本和4本买比较便宜,其他则是5本和余数买。而10本以上的本书可以分别对应6~10本,例如 11本与6本是等价的,17与7本事等价。。。计算的规则在于把本数n mod 5 =k,然后再对应k+5即可。然后5*y+8的数例外。
三·代码
// goyshu.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "iostream" using namespace std; int main() { int b;//定义购买的书籍数 int m,n; int i; double sum=0; cout<<"请输入需要购买的书籍数:"<<endl; cin>>b; m=b/5; n=b%5; i=n+5; if(i!=8) { switch(n) { case 0: sum=m*40*0.75; break; case 1: sum=m*40*0.75+8; break; case 2: sum=m*40*0.75+16*0.95; break; case 3: sum=m*40*0.75+24*0.9; break; case 4: sum=m*40*0.75+32*0.8; break; } } else sum=(m-1)*30+4*8*0.8*2; if(i!=8) { cout<<"读者购买"<<b<<"本书的最低价格为:"<<endl; cout<<sum<<endl; cout<<"可以分为买"<<m<<"套"<<"和"<<n<<"本不同类型的书"<<endl; } else { cout<<"读者购买"<<b<<"本书的最低价格为:"<<endl; cout<<sum<<endl; cout<<"可以分为买"<<m-1<<"套"<<"和"<<"2套4本不同类型的书"<<endl; } return 0; }
四·心得体会
这个题目刚开始的时候我觉得挺简单的,因为我没有算6-10的最低价是多少,错误的认为就是5+n。可是经过计算我知道了8本书的时候是个陷阱。明白了购买方法以后,代码就容易得多了。看来做个程序猿也要特别认真,别大意才对。