软件工程随堂小作业——最优惠价钱(C++)
一、设计思路
前提,没有买重复书的情况是最优惠的。
总共买n本书,可以分解成5k+(n-5k),k=0,1,2,...
1、如果k=0,n本不重复的价钱是最优惠的;
2、如果k=1,算出每一种情况的折扣并比较,最后挑选出折扣最大的;
3、如果k>1,最后的(n-5k)再按照第二种情况进行计算。
二、源代码
1 // 最优价钱.cpp : Defines the entry point for the console application. 2 // 3 4 #include "stdafx.h" 5 #include "iostream.h" 6 #define PRICE 8 7 double discount[5]={0,0.05,0.1,0.2,0.25}; 8 9 double Caculate(int num1,int num2) //计算该情况的价钱 10 { 11 double money,money1,money2; 12 money1=(PRICE-PRICE*discount[num1-1])*num1; 13 money2=(PRICE-PRICE*discount[num2-1])*num2; 14 money=money1+money2; 15 return money; 16 } 17 double Discount(int num) //分情况讨论价钱 18 { 19 int k,yushu; 20 double money1,money2,min; 21 k=num/5; //取整 22 yushu=num%5; //取余 23 min=num*PRICE; 24 switch(k) 25 { 26 case 0: 27 money1=(PRICE-PRICE*discount[num-1])*num; 28 break; 29 default: 30 if(yushu==0) 31 { 32 money1=(PRICE-PRICE*discount[4])*num; 33 return money1; 34 } 35 for(int i=1;i<(yushu+5);i++) 36 { 37 money1=Caculate(i,(yushu+5)-i); 38 if(money1<min) 39 min=money1; 40 } 41 if(num>9) 42 money2=(k-1)*5*(PRICE-PRICE*discount[4]); 43 else 44 money2=0; 45 return min+money2; 46 } 47 return money1; 48 } 49 int main(int argc, char* argv[]) 50 { 51 int booknum; 52 double money; 53 cout<<"请输入购买书籍的数量:"; 54 cin>>booknum; 55 money=Discount(booknum); 56 cout<<"最优惠的价格是"<<money<<"元"<<endl; 57 return 0; 58 }
三、运行截图
四、心得体会
因为我数学不太好,写这个程序时气死我了,一开始测试结果跟我用计算器算的不同,我以为是我的算法写错了,于是调试了好久。最后我找同学帮忙,他说我的程序思路是对的,帮我纠正了一些细节上的错误。真的觉得自己真是太没脑子了,本来很快就能写出来的程序,每次都调试那么久。
幸亏当初我爸让我报经济我没报,要不然钱都没了,都算不清是怎么没得。