买书问题

    题目:在节假日的时候,书店一般都会做促销活动。由于《哈利波特》系列相当畅销,店长决定通过促销活动来回馈读者。在销售《哈利波特》平装本系列中,一共有五卷,用编号0,1,2,3,4来表示。假设每一卷单独销售均需要8欧元,如果读者一次购买不同的两卷,就可以扣除5%的费用,三卷则更多。假设具体折扣的情况如下:

    本数        折扣

    2            5%

    3            10%

    4            20%

    5            25%

    在一份订单中,根据购买的卷数以及本数,就会出现可以应用不同折扣规则的情况。但是,一本书只会应用一个折扣。比如,读者一共买了两本卷一,一本卷二。那么,可以享受5%的折扣。另外一本卷一则不能享受折扣。如果有多种折扣,希望能够计算出的总额尽可能的低。

    要求根据这样的需求,设计出算法,能够计算出读者所购买一批书的最低价格。

 

    设计思想:

    利用归纳演绎的方法求解一般规律。根据题目提供的信息可知,当购买1-5本时,选择不同的卷号则可以获得的折扣最大,当购买的本数在6-10之间时,则需要通过分解的方式来计算最大的折扣。通过计算可知,购买的本数为6时,采用5+1的分解方式折扣最大,购买本数为7时,采用5+2的分解方式折扣最大,够买本数为8时,采用4+4的分解方式折扣最大,购买本数为9时,采用5+4的分解方式折扣最大,当购买本数为10时,采用5+5的分解方式折扣最大。由此可以总结出一般规律,当购买的本数在1—10之间时,分别对应10种不同的情况,当购买的本数大于十时,则可以通过除以10求余的方式将其转化为10以内的情况,最低总价只需再加上X倍的购买10本时的最低价格(X为除以10得到的商)。

 

    程序源代码如下:

//买书问题
//Hailin Song  2016-06-03#include<iostream>
using namespace std;int main()
{int booknumber;                      //所需购买的本数cout << "请输入需要购买多少本书:";cin >> booknumber;while (booknumber<1)                 //若输入错误则重新输入{cout << "输入错误,请重新输入:";cin >> booknumber;}if (booknumber < 11)                 //购买的本数为1-10的情况{switch (booknumber){case 1:cout << "购买方案:买5卷中的任意一卷,总价格为8欧元,没有折扣!";break;case 2:cout << "购买方案:买5卷中的任意不同的两卷,最低总价为15.2欧元!";break;case 3:cout << "购买方案:买5卷中的任意不同的三卷,最低总价为21.6欧元!";break;case 4:cout << "购买方案:买5卷中的任意不同的四卷,最低总价为25.6欧元!";break;case 5:cout << "购买方案:购买不同的五卷,最低总价为30欧元!";break;case 6:cout << "购买方案:购买不同的五卷,再从中任意挑选一卷,最低总价为38欧元!";break;case 7:cout << "购买方案:购买不同的五卷,再从中挑选不同的两卷,最低总价为45.2欧元!";break;case 8:cout << "购买方案:购买两套4本不同卷号的书,最低总价为51.2欧元!";break;case 9:cout << "购买方案:购买一套完整的五卷,再从五卷中挑选4本不同的卷,最低总价为55.6欧元!";break;case 10:cout << "购买方案:购买两套完整的五卷,最低总价为60元!";break;}}else{int booktao = booknumber / 10;               //购买本数除以10得到的商int bookyu = booknumber % 10;                //购买本数除以10得到的余数switch (bookyu){case 0:cout << "购买方案:购买" << booktao * 2 << "套完整的五卷,最低总价为!" << 60 * booktao << "欧元!";break;case 1:cout << "购买方案:购买" << booktao*2 << "套完整的五卷,再任意挑选一卷,最低总价为" << 60 * booktao + 8 << "欧元!";break;case 2:cout << "购买方案:购买" << booktao*2 << "套完整的五卷,再任意挑选不同的两卷,最低总价为" << 60 * booktao + 15.2 << "欧元!";break;case 3:cout << "购买方案:购买" << booktao*2 << "套完整的五卷,再任意挑选不同的三卷,最低总价为" << 60 * booktao + 21.6 << "欧元!";break;case 4:cout << "购买方案:购买" << booktao*2 << "套完整的五卷,再任意挑选不同的四卷,最低总价为" << 60 * booktao + 25.6 << "欧元!";break;case 5:cout << "购买方案:购买" << booktao*2+1 << "套完整的五卷,最低总价为" << 60 * booktao+30 << "欧元!";break;case 6:cout << "购买方案:购买" << booktao*2+1 << "套完整的五卷,再任意挑选一卷,最低总价为" << 60 * booktao + 38 << "欧元!";break;case 7:cout << "购买方案:购买" << booktao*2+1 << "套完整的五卷,再任意挑选不同的两卷,最低总价为" << 60 * booktao + 45.2 << "欧元!";break;case 8:cout << "购买方案:购买" << booktao*2 << "套完整的五卷,再购买两套4本不同的卷号,最低总价为!" << 60 * booktao + 51.2 << "欧元!";break;case 9:cout << "购买方案:购买" << booktao*2+1 << "套完整的五卷,再任意挑选不同的四卷,最低总价为!" << 60 * booktao + 55.6 << "欧元!";break;}}return 0;
}

  

    测试结果截图:

 

 

   个人总结:

    买书问题是《编程之美》中的一个经典案例,老师上课时给我们展示出题目后,我的第一个感觉就是懵,读不懂题目的意识,在老师的引导下,开始一步步的深入分析题目。老师给我们的引导是采用演绎归纳的方法,即通过计算特殊的情况找出一般的规律。通过这种方式,我们找出了1-10以后的各种情况,对于超出十的情况则可以通过求余的方式转化为十以内的情况。这种方法确实很好用,用这种方法去解决问题也非常简单易懂。

    在《编程之美》这本书中,对于这个问题给出了两种不同的解法,第一种解法采用了数学公式的算法,不过这种算法时间复杂度和空间复杂度都比较高,第二种算法是贪心策略,其实就是上述的演绎规范方法,但是对于《编程之美》上的介绍没有看懂,以后有时间的话再进行深入的研究吧。

   

转载于:https://www.cnblogs.com/hulidanxiang/p/5561038.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/490584.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

excel二极管伏安特性曲线_【刘敏蔷老师】半导体二极管的原理及应用

半导体二极管18101113 李莹半导体二极管是十分常见的一种电子器件。像手机屏幕、霓虹灯、收音机等生活常见的器件中都会用到半导体二极管。今天就给大家简单介绍一下半导体二极管的工作原理以及它的应用。No.1什么是二极管&#xff1f;二极管&#xff0c;简单明了的说就是一种只…

SPSS入门学习

文章目录一、初识——初步上手操作安装软件1、了解.sav——数据文件扩展名2、打开SPSS开始上手进行一些简单操作2.1 导入一个系统自带的数据(1.数据编辑窗口&#xff08;SPSS Data Aditor&#xff09;(2.结果输出窗口&#xff08;SPSS Viewer&#xff09;(3.程序语句窗口&#…

PPT讲解机器人产业发展现状与未来展望,重磅资料

来源&#xff1a;直观学机械法律顾问&#xff1a;赵建英律师前段时间咱们分享过王喜文博士做的关于《5G》的PPT&#xff0c;大家反映做的很棒&#xff0c;最近王喜文博士在机械工业出版社又出了一本新书&#xff1a;智能&#xff1a;《新一代人工智能发展规划》解读&#xff0c…

Ubuntu设置鼠标灵敏度

Ubuntu中鼠标的使用经常飘&#xff0c;可以设置鼠标的灵敏度 打开终端&#xff0c;输入以下代码&#xff0c;来查找自己鼠标的设备号。 xinput --list 我的鼠标的设备名是 "Logitech G300s Optical Gaming Mouse" 找到鼠标设备对应的ID号&#xff0c;比如我的是11…

全球工业互联网十大最具成长性技术

来源&#xff1a;经济参考报为准确把握全球工业互联网战略方向&#xff0c;及时跟踪工业互联网创新动态及特征态势&#xff0c;前瞻研判工业互联网产业化重大布局&#xff0c;中国工业互联网研究院任近来调研走访了一批在工业互联网相关技术及产业方面具备领先水平和特色的骨干…

python简单选择排序_python 选择排序

原博文 2018-09-21 23:46 − def select_sort(slist): for i in range(len(slist)): x i for j in range(i, len(slist)): if slist[j] < slist[x]: x j... 相关推荐 2019-12-06 14:02 − 学习提纲 生成指定范围的数值列表&#xff0c;语法格式如下&#xff1a; 生成一个包…

Matlab数据类型及预定义

Matlab数据类型 最新的版本会包括更多的类型。 因为Matlab是面向matrix的编程语言&#xff0c;所以&#xff0c;Matlab将任何一个变量都看作一个matrix。如果是一个数 就是1x1的矩阵。 matlab不需要预定义变量&#xff0c;但是 预定义变量可以使循环程序执行更快。 全局变量…

Nature解析中国AI现状,2030年能引领全球吗?

来源&#xff1a;机器之心《Nature》近日的一篇分析文章表示&#xff0c;中国的人工智能研究在质量上进步很快&#xff0c;但是在高影响的论文、人才和伦理上面还需要追赶美国。中国巨大的人口总量帮助人脸检测技术快速进步。中国不仅仅是世界上人口最多的国家&#xff0c;看起…

变量的存储类型(storage class)

变量的存储类型(storage class) 对于变量的存储类型&#xff0c;前面遇到过一些疑惑&#xff0c;再简单的在这里说一下。存储类型是指存储变量值的内存类型&#xff0c;它用来决定存储空间的大小。变量的存储类型决定着变量的存储器和作用域。有三个地方可以用于存储变量&#…

centos7调节虚拟机字体_初次安装虚拟机中Ubuntu16.04系统设置的一些小问题(小白教程)...

也不知道是哪里操作有误&#xff0c;最开始安装成功我的界面是这个样子&#xff0c;之前第一次安装的时候忘记改语言&#xff0c;这次注意到了&#xff0c;直接安装的中文。看着中文实在太舒服&#xff0c;好像设置都变得简单了&#xff1f;一、切换中文输入法&#xff1a;系统…

用半机械器官,打开发育生物学领域的黑匣子

来源&#xff1a;中国生物技术网 随着自然发育中的组织一起生长的微型传感器一小群细胞是如何组织成为心脏、大脑或者肾脏等器官的&#xff1f;这一发育的关键时期&#xff0c;长期以来一直是发育生物学领域的黑匣子。部分原因是因为没有足够小且足够灵活的传感器在不损伤细胞的…

matlab图像边缘检测分析

更多MATLAB图像处理视频请点击 http://study.163.com/course/courseMain.htm?courseId1003594013 所谓边缘是指其周围像素灰度有变化的那些像素的集合。边缘广泛存在于物体与背景之间、物体与物体之间、基元与基元之间。物体的边缘是由灰度不连续所反映的。基于边缘的…

python可以实现哪些功能_Python中实现机器学习功能的四种方法介绍

本篇文章给大家带来的内容是关于Python中实现机器学习功能的四种方法介绍&#xff0c;有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对你有所帮助。 在本文中&#xff0c;我们将介绍从数据集中选择要素的不同方法; 并使用Scikit-learn&#xff08;skl…

Nature子刊批判人工神经网络:先天结构比后天训练更重要,应该借鉴动物大脑...

来源&#xff1a;凹非寺人工神经网络可以从动物大脑中学到什么&#xff1f;最新一期Nature子刊上&#xff0c;就刊登了这样一篇文章。美国冷泉港实验室的神经科学家Anthony M. Zador&#xff0c;对当下人工神经网络的研究思路进行了深刻反思与批判&#xff1a;大多数动物行为不…

matlab的傅里叶变换

更多MATLAB图像处理视频请点击 http://study.163.com/course/courseMain.htm?courseId1003594013 图像变换&#xff1a; 更多MATLAB图像处理视频请点击 http://study.163.com/course/courseMain.htm?courseId1003594013 在 MATLAB 中&#xff0c;一般用二元函数…

笔记一 Redis基础

在cmd 命令中运行redis 运行redis命令 &#xff1a;redis-cli Reids数据结构初探 数据结构有五种 string(字符串)、 list(列表)、set&#xff08;集合&#xff09;、hash&#xff08;散列&#xff09;、zset(有序集合) redis各类型的简单介绍 和最基础的命令 1.string&a…

matlab的四维图像数据可视化

1.颜色来表示第四维 前面已经学了三维图形可视化&#xff0c;所谓三维就是指x轴&#xff0c;y轴&#xff0c;z轴组成了我们的三维&#xff0c;那么第四维用什么来表示呢&#xff0c;我们这里要用颜色来表示第四维&#xff0c;所谓四维图形可视化就是在三维图形可视化的基础上&…

Mybatis 入门之resultMap与resultType讲解实例

resultMap&#xff1a;适合使用返回值是自定义实体类的情况 resultType&#xff1a;适合使用返回值得数据类型是非自定义的&#xff0c;即jdk的提供的类型 resultMap &#xff1a; type&#xff1a;映射实体类的数据类型 id&#xff1a;resultMap的唯一标识 column:库表的字段…

全球半导体产业60年兴衰启示录!

本文来自华泰证券&#xff0c;研究员张馨元、钱海、陈莉敏&#xff0c;感谢分享&#xff01;科技是当前行业配置不能忽视的主线&#xff0c;我们在今年 5 月 10 日发布的中期策略报告《无科技不牛市&#xff0c;以时间换空间》中提出&#xff0c;5G 时代物联网技术革命带来的是…

手机上python编程工具3和3h有区别吗_Python3.5内置模块之time与datetime模块用法实例分析...

本文实例讲述了Python3.5内置模块之time与datetime模块用法。分享给大家供大家参考&#xff0c;具体如下&#xff1a; 1、模块的分类 a、标准库&#xff08;Python自带&#xff09;&#xff1a;sys、os模块 b、开源模块&#xff08;第三方模块&#xff09; c、自定义模块 2、内…