#include<iostream>
using namespace std; int main()
{
int count,x[]={};
int a,b,c,d;
cout<<"请输入总数:"<<endl;
cin>>count;
a=count/5;
x[]=a;
b=count%5;
x[b-1]=1; if(b==3&&b!=count)
{
/*a=a-;
x[]=a;
b=b+;
c=c-;
a=count/c;
x[c-]=a;
b=count%c;
x[b-]=b;*/
x[4]=x[4]-1;
x[3]=x[3]+2; }
cout<<"购买单本:"<<x[]<<"本"<<endl;
cout<<"购买两本:"<<x[]<<"本"<<endl;
cout<<"购买三本:"<<x[]<<"本"<<endl;
cout<<"购买四本:"<<x[]<<"本"<<endl;
cout<<"购买五本:"<<x[]<<"本"<<endl;
return ;
}

注释:

购买数量          1      2      3      4     5

折扣率(%)    5     10     15    20    25

单本折扣(元)   0     0.4   0.8    1.6    2

购买数量              6       7        8      9       10    ……

最优解               5+1    5+2   4+4   5+4   5+5   ……

可知,买五本单本折扣最大,所以当购买数量小于等于5时,应该优先选择购买不同种类的书

当购买数量大于5时,应该优先购买五本,可是当购买的的种类的之间距离相差超1时(例如:8=5+3,5-3=2),容易出现错误

继续向下计算,发现大数的时候也是如此

所以用总数count做整除,得到购买五本的数量,余数为购买其他数量的书的数

当二者相差超过1时,商减1,购买5本数量少1,减小差距

05-11 21:41