一、题目及要求
本数 | 折扣 |
2 | 5% |
3 | 10% |
4 | 20% |
5 | 25% |
二、设计思路
分析如下:
先找规律:
买1本: 1*8=8
买2本: 2*8*(1-5%)=15.2
买3本: 3*8*(1-10%)=21.6
买4本: 4*8*(1-20%)=25.6
买5本: 5*8*(1-25%)=30 一套
买6本: 1*8+5*8*(1-25%)=38 最优(一套一本)
2*8*(1-5%)+4*8*(1-20%)=40.8
3*8*(1-10%)+3*8*(1-10%)=43.2
买7本最优:2*8*(1-5%)+5*8*(1-25%)=45.2 (一套二本)
买8本最优:4*8*(1-20%)+4*8*(1-20%)=51.2 (两套中的不同4本)
买9本最优:4*8*(1-20%)+5*8*(1-25%)=55.6 (一套四本)
买10本最优: 5*8*(1-25%)+ 5*8*(1-25%)=60 (两套)
....
由上可知:除了买8本时最优解不含5,其他为1+5,2+5,4+5,5+5.
所以可以除以10取余数。如11即为10+1,12为10+2....
即
所花费用=除以10的商*60+个位数所对应钱(所取余数对应情况)
购买计划:
除了余数为8时:商数*2套书和上面所列情况
余数为8时:商数*2套书和两套中的不同4本
算法:
(1)获取输入的书数
(2)求得书数的余数与商
(3)利用switch语句或if语句选择对应的情况,计算余数对应本数所花费钱
(4)输出所得结果
三、源代码
1 /*2016.6.2 weilihua 买书问题*/ 2 #include<iostream> 3 using namespace std; 4 int main() 5 { 6 int book_num=0; 7 int shangshu;//商数 8 int yushu=0;//余数 9 double ys_money;//余数部分对应钱 10 double money;//总钱数 11 while (book_num==NULL||book_num == 0)//如果书数为空或零则请重新输入 12 { 13 cout<<"请输入买书数量:"; 14 cin>>book_num; 15 } 16 shangshu=book_num/10; 17 yushu=book_num%10; 18 switch(yushu) 19 { 20 case 0: 21 ys_money=0; 22 break; 23 case 1: 24 ys_money=8; 25 break; 26 case 2: 27 ys_money=15.2; 28 break; 29 case 3: 30 ys_money=21.6; 31 break; 32 case 4: 33 ys_money=25.6; 34 break; 35 case 5: 36 ys_money=30; 37 break; 38 case 6: 39 ys_money=38; 40 break; 41 case 7: 42 ys_money=45.2; 43 break; 44 case 8: 45 ys_money=51.2; 46 break; 47 case 9: 48 ys_money=55.6; 49 break; 50 } 51 money= shangshu*60+ ys_money; 52 cout<<"一共花"<<money<<"元"<<endl; 53 cout<<"购买计划如下:"<<endl; 54 55 if((yushu==8))//购买本数余数为8时特殊处理 56 { 57 cout<<"需购买"<<shangshu*2<<"套和和两套中的不同4本"<<endl; 58 } 59 else if((yushu==5)||(yushu==0))//余数为5或0时为整套 60 { 61 cout<<"需购买"<<book_num/5<<"套"<<endl; 62 } 63 else if(yushu>5)//余数大于5时情况(排除8) 64 { 65 cout<<"需购买"<<book_num/5<<"套和"<<"一套中的不同"<<yushu%5<<"本"<<endl; 66 } 67 else if(yushu>0)//余数小于5情况(排除0) 68 { 69 cout<<"需购买"<<shangshu*2<<"套和"<<"一套中的不同"<<yushu<<"本"<<endl; 70 } 71 72 return 0; 73 }
四、截图
五、项目计划日志
周活动总结表
姓名:魏** 日期2016.6.2
日期 任务 | 听课 | 编写程序 | 阅读书籍 | 准备考试 | 日总计 | ||
周一 |
100 | 100 | |||||
周三 |
100 | 100 | |||||
周四 |
100 | 100 | |||||
周总结 |
100 | 200 | 300 |
阶段时间和效率 周数(上一次周活动表的周数+1):
不包括上一周在内的累计时间
总计 |
100 |
200 |
|
|
|
|
300 |
平均 |
100 |
200 |
|
|
|
|
300 |
最大 |
100 |
200 |
|
|
|
|
300 |
最小 |
100 |
200 |
|
|
|
|
300 |
以前各周的累计时间
总计 |
100 |
200 |
|
|
|
|
300 |
平均 |
100 |
200 |
|
|
|
|
300 |
最大 |
100 |
200 |
|
|
|
|
300 |
最小 |
100 |
200 |
|
|
|
|
300 |
六、时间记录表:
学生 魏** 日期 2016年6月2日
教师 王** 课程 软件工程
日期 |
开始时间 |
结束时间 |
中断时间 |
净时间 |
活动 |
备注 |
5.30 |
14:30 |
16;20 |
10 |
100 |
上课 |
|
6.1 |
22:00 |
23:50 |
10 |
100 |
编写程序 |
|
6.2 |
14:30 |
16:30 |
无 |
100 |
编写程序 |
作业 |
七、个人总结
这次买书问题,上课时老师提醒枚举的方法找出规律,把不同的特例单独解决,本以为实现时会很简单,但在实现过程中发现仍然要细心才能解决。