一、题目描述
书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元, 具体折扣如下所示: 本数 折扣 2 5% 3 10% 4 20% 5 25%
根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。 设计算法能够计算出读者购买一批书的最低价格。
二、设计思路
无论购买数的数量多少,均与6~10这5个数类似,或者说是相关,算出在这5中情况下最优购书方法,基本可以确定其他数目的最优购书方法。计算可得如下结果,
6本,以5,1方式购买最实惠;
7本,以5,2方式购买最实惠;
8本,以4,4方式购买最实惠;
9本,以5,5方式购买最实惠;
10本,以5,5方式购买最实惠。
书写过程中判断了两个大的判断条件,即书的数目没有超过10和超过10,来改变输出结果的不同(结果文字描述的差别)。
三、代码实现
1 //刘双渤,以最优惠的价格购买图书问题 2 #include <iostream> 3 using namespace std; 4 5 void main() 6 { 7 int n; 8 int kyu,kshang; 9 10 cout<<"请输入购书本书:"<<endl; 11 cin>>n; 12 13 while(n <= 0) //数目小于等于0为不合法 14 { 15 cout<<"输入值有错,请重新输入:"<<endl; 16 cin>>n; 17 } 18 19 if(n <= 10 && n > 0) //书的数目小于等于10 20 { 21 if(n == 8) 22 { 23 cout<<"购2套书,每不同4本为一套。"<<endl; 24 } 25 else if(n == 10) 26 { 27 cout<<"购2套书,每不同5本为一套。"<<endl; 28 } 29 else 30 { 31 kshang = n/5; 32 kyu = n%5; 33 34 if(kshang == 0) 35 { 36 cout<<"购1套书,每不同"<<kyu<<"本为一套。"<<endl; 37 } 38 else if(n == 5) 39 { 40 cout<<"购1套书,每不同5本为一套。"<<endl; 41 } 42 else 43 { 44 cout<<"购2套书,不同"<<kyu<<"本为一套,不同5本为一套。"<<endl; 45 } 46 } 47 } 48 else //数目大于10 49 { 50 kshang = n/5; 51 kyu = n%5; 52 53 if(kyu == 3) 54 { 55 cout<<"购"<<kshang + 1<<"套书,"<<kshang - 1<<"套为不同5本为一套,"<<"2套为不同4本为一套。"<<endl; 56 } 57 else if(kyu == 2 || kyu == 4) 58 { 59 cout<<"购"<<kshang + 1<<"套书,"<<kshang<<"套为不同5本为一套,"<<"1套为不同"<<kyu<<"本为一套。"<<endl; 60 } 61 else if(kyu == 1) 62 { 63 cout<<"购"<<kshang + 1<<"套书,"<<kshang<<"套为不同5本为一套,"<<"1套为1本为一套。"<<endl; 64 } 65 else 66 { 67 cout<<"购"<<kshang<<"套书,"<<"全部为5本不同为一套。"<<endl; 68 } 69 } 70 }
四、实现截图
五、个人总结
题目虽然简单,但却能考验一下严谨性,写的代码可能相对有些长,也面面俱到了。
还有记性真是有点差。