#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,减小差距