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