购书思想课堂作业4.14

1.题目:

  

  书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元, 具体折扣如下所示:

本数                  折扣

2                       5%

3                       10%

4                       20%

5                       25%

n根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。

n设计算法能够计算出读者购买一批书的最低价格。

要求将设计思想、代码实现、实现截图、个人总结以博文的形式发表。

2.设计思想

  当购书数目为0~5时,不需讨论。

  当购书数为6时,经过计算,5+1的方案最便宜,

  当购书数为7时,经过计算,5+2的方案最便宜。

  当购书数为8时,经过计算,4+4的方案最便宜。

  但购书数为9时,经过计算,5+4的方案为最佳。

  这里我们可以看出除了购书数为8时,没有5本折扣,其他数目都由5方案和其他方案组成。

  而当购书数目n大于10时,我们可以把n看成:n=5*b+a,也就是一个5的倍数加上一个6~9之间的数,因此对于任何数目,主要的购书分歧在于这6~9本应该如何购买,购买方案参照上述

  于是按照这个思想,我们设计程序时可以这样做,接受购书的数目num,把num用10mod,如果余数是6~9之间,就mod10处理除数和余数,如果是1~4之间,就减去5之后再mod10处理除数和余数,如果是余数是5和0的话,就直接按5方案处理。

3.源代码 

#include<iostream.h>
void show(int x , double &jia)
{
	if(x==6)
	{
		cout<<" 5 1 ";
		jia=jia+5*8*0.75+8;
	}
	if(x==7)
	{
		cout<<" 5 2 ";
		jia=jia+5*8*0.75+2*8*0.95;
	}
	if(x==8)
	{
		cout<<" 4 4 ";
		jia=jia+8*8*0.8;
	}
	if(x==9)
	{
		cout<<" 5 4 ";
		jia=jia+5*8*0.75+4*8*0.8;
	}
}
void main()
{
	cout<<"请输入要购买的书的数量:"<<endl;
	int num,a,b,i;
	double jia=0;
	cin>>num;
	cout<<"最便宜的购书方案:"<<endl;
	a=num%10;
	if(a>5)
	{
		b=num/5;
		for(i=1;i<=b;i++)
		{
			cout<<" 5 ";
		}
		jia=jia+b*8*5*0.75;
		show(a,jia);
	}
	else if(a<5&&a>0)
	{
		a=a+5;
		b=num/5-1;
		for(i=1;i<=b;i++)
		{
			cout<<" 5 ";
		}
		jia=jia+b*8*5*0.75;
		show(a,jia);
	}
	else
	{
		b=num/5;
		for(i=1;i<=b;i++)
		{
			cout<<" 5 ";
		}
		jia=jia+b*8*5*0.75;
	}
	cout<<endl<<"一共花费"<<jia<<"元"<<endl;
}

3.截图

4.个人总结

  算法很简单,方法很重要

时间: 2024-10-15 20:32:36

购书思想课堂作业4.14的相关文章

课堂作业数组最大和

题目: 输入一个一维整形数组,数组里有正数也有负数. 一维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值. 发表一篇博客文章讲述设计思想,出现的问题,可能的解决方案(多选).源代码.结果截图.总结. 设计思想: 1.设计思想: 首先设置两个变量,分别用来存储数组长度也就是number和结果result:然后再通过语句来询问用户需要的数组长度再设个动态数组用来让用户输入数组中的数字,将每一个数值都存放进数组对应位

软件工程概论课堂作业3

题目:返回一个整数数组中最大子数组的和 要求: 输入一个一维整形数组,数组里有正数也有负数. 一维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值. 设计思想: 用户自定义数组长度并依次输入数组元素,设一个全局变量初始化为零的数组a[N],N=10000: 1.因为该数组首尾相接可视作一个环,那么我们需要在一个合适的位置断开,把数组元素展成一条笔直的带子. (1).设用户自定义数组长度为m,输入数组各元素值a[1

软件工程课堂作业04

软件工程课堂作业04 源代码: 1 package jian; 2 import java.io.*; 3 import java.util.Scanner; 4 public class Point3D{ 5 public static int Lenght(int list[],int lenght) 6 { 7 int i,max; 8 max=list[0]; 9 for(i=1;i<=(lenght-1);i++) 10 { 11 if(list[i]>max) 12 { 13 ma

课堂作业及 动手动脑问题整理

课堂作业一 使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数.请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”. 程序: package com; public class Duixiang { public static void main(String[] args){ duixiang a=new duixiang(); a.out(); duixiang b=new duixiang(); b.out(); } } class duixiang{ stati

3.30日第八次作业,第14章,采购管理,15章,信息文档和配置管理

3.30日第八次作业,第14章,采购管理,15章,信息文档和配置管理   第14章.采购管理1.采购管理包括哪些过程?(记)P382-383 答:1).编制采购计划.2).编制询价计划.3).询价.招投标.4).供方选择.5).合同管理.6).合同收尾. 2.编制采购计划过程的成果是什么?P386-387 答:1).采购管理计划.2).采购工作说明书. 3.判断:每个采购工作说明书都来自于项目范围基准.P387 答:是的. 4.结合P388页表14-1,工作说明书应该清楚地描述哪些内容?P388

课堂作业-购书问题

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

软件工程课堂作业——购书问题

小组成员:陈志利   檀威 一.题目要求 书店针对<哈利波特>系列书籍进行促销活动,一共5卷,用编号0.1.2.3.4表示,单独一卷售价8元, 具体折扣如下所示:                                  本数                   折扣                                   2                       5%                                   3              

软件工程课堂作业(二)——升级版随机产生四则运算题目设计思想

升级版随机产生四则运算题目要求: 1.避免题目重复: 2.可定制题目(题目数量.打印方式): 3.可以选择:是否有乘除法.是否有括号.定制数值范围.加减有无负数.除法有无余数.是否支持分数.是否支持小数.定制每行间隔等. ********************************************************************************************************* 设计思想: 1.避免重复:输出时,确定了运算符号,两个运算数都相同

课堂作业——找1

题目: 给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数. 要求: 写一个函数 f(N) ,返回1 到 N 之间出现的 “1”的个数.例如 f(12) = 5: 在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少? 设计思想: (解法一) 开始想到了一个最简单的方法来计算f(N),那就是从1开始遍历,直到N结束,把其中每一个数中含有“1”的个数加起来,结果就是从1到N所有“1”的个数的和.这个方法很简单,但算法的实现效率是个大问题,如果N很大,则