Harrypotter

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

原文地址:https://www.cnblogs.com/fooreveryu/p/5553486.html