买书问题

问题:

某书店对《哈利波特》做促销活动,一共有5卷。假设每一卷的单独销售价格为8元,如果读者一次购买不同的两卷,就可以扣除5%的费用,三卷则更多,优惠如下:

对所有可能情况分析之:

可以由此看出规律 编写代码如下;

#include<stdio.h>  

int change[5] = {25,20,10,5,0};  

//求数组中最大的值
//用于取出做大节约钱数
int max_index(int a[5]){
    int max=0;
    int i;
    for(i=0;i<5;i++){
        if(max < a[i])
            max = a[i];
    }
    return max;
}
//冒泡排序
//用于转化最小表示(1,2,2,2,2)->(2,2,2,2,1)
void bubble(int *a,int n)
{
    int i,j,temp;
    for(i=0;i<n-1;i++)
        for(j=i+1;j<n;j++)
            if(a[i]<a[j]) {
                temp=a[i];
                a[i]=a[j];
                a[j]=temp;
            }
}  

//递归函数
int func(int a[5]){
    int i,j,k;
    int buf[5];
    int cash[5];
    for(i=0;i<5;i++){
        cash[i] = 0;
        //buf[i] = a[i];
    }
    //退出条件
    if(a[0]==a[1]&&a[1]==a[2]&&a[2]==a[3]&&a[3]==a[4]&&a[4] == 0){
        return 0;
    }
    //排序 转化最小表示
    bubble(a,5);
    //5次循环
    for(i=1;i<=5;i++){
        if(a[5-i] >= 1){
            for(k=0;k<5;k++){
                buf[k] = a[k];
            }
            //减一
            for(j=0;j<=5-i;j++)
                buf[j] = buf[j]-1;
            //继续递归
            cash[i-1] = (5-i+1)*8*change[i-1]+func(buf);
        }
    }
    //返回最大值
    return max_index(cash);
}  

int main(){  

    int b=0;
    int a[5] = {0,0,0,0,0};
    printf("本程序假设每本书售价8元,请输入书本个数:");
    scanf("%d",&b);
    for(int i=0;i<b;i++)
    {
        a[i%5]+=1;
    }
    float result =0;
    result = func(a);
    printf("共节约 %2.2f元!\n",result/100);
}

运行截图:

时间: 2024-10-12 09:04:46

买书问题的相关文章

编程之美之买书问题

拿到这个问题,我的第一反应是用贪心算法,优先满足不同种类多的,这样打的折扣比价多.但是,看了书中的分析发现,* 我们设定的贪心策略实际上是有问题的, ie 在买 5 + 3 本的时候会出错. 看到这里,书上说可以利用改进的贪心算法,感觉如果换了相应的折扣数量,可能又会有不同的结果了.因而,没有深入的研究下去. 既然,贪心算法不可行,那就用动态规划呗. 这里的动态规划思路很简单不过写起来有些复杂.我们这里用到了5维数组, 光是init 就写了好多. 其实我在写的时候,就在想有什么简单一点的方法可以

(动态规划)6049:买书

描述 小明手里有n元钱全部用来买书,书的价格为10元,20元,50元,100元. 问小明有多少种买书方案?(每种书可购买多本) 输入 一个整数 n,代表总共钱数.(0 <= n <= 1000) 输出 一个整数,代表选择方案种类 样例输入 样例输入1:20 样例输入2:15 样例输入3:0 样例输出 样例输出1:2 样例输出2:0 样例输出3:0 我の代码 #include <iostream> int pri[5]; int dp[1001]; using namespace s

4月14号周二课堂练习:买书最优问题

一.问题提出 书店针对<哈利波特>系列书籍进行促销活动,一共5卷,用编号0.1.2.3.4表示,单独一卷售价8元, 具体折扣如下所示: 本数                   折扣 2                       5% 3                       10% 4                       20% 5                       25% 二.题目要求 1.根据购买的卷数以及本数,会对应不同折扣规则情况.单数一本书只会对应一个折扣

课堂练习-买书价格最低

实验背景 书店针对<哈利波特>系列书籍进行促销活动,一共5卷,用编号0.1.2.3.4表示,单独一卷售价8元, 具体折扣如下所示: 本数 折扣 2 5%         3 10%         4 20%            5 25% 根据购买的卷数以及本数,会对应不同折扣规则情况.单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠.       设计算法能够计算出读者购买一批书的最低价格. 一.设计思想此问题可以折算为如何取余

软件工程——买书折扣问题

1.题目 书店针对<哈利波特>系列书籍进行促销活动一共5卷,用编号0.1.2.3.4表示,单独一卷售价八元,具体折扣如下所示: 本书       折扣 2           5% 3          10% 4          15% 5          20% 根据购买的卷数以及本数,会对应不同折扣规则情况.单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠.设计算法能够计算出读者购买一批书的最低价格. 2.设计思路 根据题目

OpenJudge百炼习题解答(C++)--题4040:买书问题

题: 总时间限制:  1000ms  内存限制:  65536kB 描述 某网上书店举行优惠促销,现有两种优惠策略.策略一是购书总额大于100元的可享受免费送货.策略二是如果购书数量大于3本,则购书总额享受95折优惠(不包括运费).两种优惠策略不能同时享受,最多可选择其中一种优惠策略.运费为20元.小明想在这个网站上买书,请帮他选择最优的优惠策略. 输入 有多行,第一行是买书的种类N(0 <= N <= 100),接下来的N行每行输入一种书目的购买数量M和代价P(P不一定是整数).当N为-1时

买书?买知识?

书是什么? 书籍只是知识的载体. 想要领会知识,还需要付出额外的时间和精力. 书贵么? 买书的几十元其实不算什么,珍贵的是读书的时间和注意力. 一本书只要有一部分内容有价值,有启发,自己收获了经验,最好还能联系实践.获得成长,那么就值回书价了. 如何做? 珍惜自己的时间,读好书,吸收好书内的知识. 同"爱读书.爱成长"的各位共勉!

个人项目——买书

用折后最低价买书 一.程序要求 书店针对<哈利波特>系列书籍进行促销活动,一共5卷,用编号0.1.2.3.4表示,单独一卷售价8元, 具体折扣如下所示: 本数                    折扣 2                       5% 3                       10% 4                       20% 5                       25% 根据购买的卷数以及本数,会对应不同折扣规则情况.单数一本书只会对应一个折

Spring整合hibernate的一个例子:用事务买书

jar包: 基本的文件框架: 1.首先配置jdbc的连接数据,也就是db.properties 此处注意在url上,这里不是xml文件,不需要加上amp.用一个问号就可以 1 2 3 4 user=root password= driverClass=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/spring001?useUnicode=true&characterEncoding=UTF-8 2.在    spring-config

买书最低价问题

设计思路 已知书的单价和优惠的规则,那么可以根据计算可以得到以下规律: 买5本书(包含五本)时,买的书不重复是最低价: 买6本书时,买一套(5本)和买1本(任意)是最低价: 买7本书时,买一套(5本)和2本(任意但不重复)是最低价. 买8本书时,任意4本(不重复),各买两本是最低价. 买9本书时,买一套(5本)和4本(任意但不重复)是最低价. 若买书X本: 当买书的数量10本以内,就以上述各情况购买: 若买书数量超过10本,则求X/10是的余数(小于10)和商:此时最低价为(商*五本书是的价格*