题目要求:

  题目记得不太清楚,大概的意思是一个商店的打折方案如下:设一个客户买了n个商品,价格分别是p1,p2,...,pn

  (1)第一个商品不打折,即cost=p1;

  (2)第i个商品的折扣d=min{p1,p2,...,pi-1}.如果d>pi也就是说打折的前比他付的钱还多,那么这个商品就不要钱了,相当于d=p1;

  例如:n=4,价格分别为{4,9,2,3},这是题目给的示例  

    p1=4,d1=0,cost=4,because,the first item is never discounted;

    p2=9,d2=4,cost=9-4=5.means that the second item only need to pay 5$

    p3=2,d3=min{4,9}=4<p3, so d3=2,cost=2.means that the third item is free

    p4=3,d4=min{4,9,2}=2,d4=2,cost=3-2=1,.means that the fourth item need to pay 1$

  so, the total prices is 10$

    示例截图附在最后了。

解题思路

  最坏的思路:对于每个价格,求前面的最小值,类似于示例的思路。

  目前最优的思路:仔细思考会发现,对于第i个价格,di=min{min{p1,...,pi-2},pi-1},所以每次求前面价格最小值的时候,可利用之前的计算。

代码如下:

1、第一种:复杂性比较高  

public static void reduceSum(int[] prices){
int sumReduce=prices[0];
for (int i = 1; i < prices.length; i++) {
int minvalue=minValue(prices,i);
//System.out.println(prices);
//System.out.println(minvalue);
if (prices[i]<minvalue) {
minvalue=prices[i];
}
// else{
System.out.println("add:"+(prices[i]-minvalue));
sumReduce+=prices[i]-minvalue;
// }
} System.out.println("qian:"+sumReduce);
}
public static int minValue(int[] prices,int point){
int min=Integer.MAX_VALUE;
for (int i = 0; i < point; i++) {
if (prices[i]<min) {
min=prices[i];
}
}
System.out.println("min:"+min);
return min;
} public class FirstPra {
public static void main(String[] args) {
int[] prices={4,9,2,3};
//minValue(prices, 3);
reduceSum(prices);
}
public static void reduceSum(int[] prices){
int sumReduce=prices[0];
for (int i = 1; i < prices.length; i++) {
int minvalue=minValue(prices,i);
//System.out.println(prices);
//System.out.println(minvalue);
if (prices[i]<minvalue) {
minvalue=prices[i];
}
// else{
System.out.println("add:"+(prices[i]-minvalue));
sumReduce+=prices[i]-minvalue;
// }
} System.out.println("qian:"+sumReduce);
}
public static int minValue(int[] prices,int point){
int min=Integer.MAX_VALUE;
for (int i = 0; i < point; i++) {
if (prices[i]<min) {
min=prices[i];
}
}
System.out.println("min:"+min);
return min;
}
}

2、第二种,目前最优的思路”

     int prices={4,9,2,3};
     int sumReduce=prices[0];
int minValue_last=prices[0];
int minValue_cur=0; for (int i = 1; i < prices.length; i++) {
minValue_cur=minValue_last<prices[i]?minValue_last:prices[i];
sumReduce+=prices[i]-minValue_cur;
minValue_last=minValue_cur;
} System.out.println("qian:"+sumReduce);

  

“凯易迅Calix”实习上机——打折问题的更多相关文章

  1. “凯易迅Calix”实习上机——求元音开头辅音结尾的子串

    题目要求: 对于一个输入的字符串(26个小写字母组成),求出他的所有子串中元音开头,辅音结尾的子串.在这所有的子串中,输出第一个和最后一个. 例如aab,共有子串a,aa,aab,ab,b:但是满足元 ...

  2. python爬虫:爬取易迅网价格信息,并写入Mysql数据库

    本程序涉及以下方面知识: 1.python链接mysql数据库:http://www.cnblogs.com/miranda-tang/p/5523431.html   2.爬取中文网站以及各种乱码处 ...

  3. 牛一网ecshop家电数码模板(仿易迅网)for ecshop 2.7.3

            本模板尤其适用于家电数码行业. 本模板已经开发.测试完毕,并开放演示. 本模板支持全站静态.销售数量后台自定义.首页商品独立图片.品牌独立展示.商品精美团购.宽屏窄屏自动识别并切换.分 ...

  4. Selenium2学习-008-WebUI自动化实战实例-006-易迅登录之 frame 处理

    此文主要讲述用 Java 编写 Selenium 自动化测试脚本编写过程中,在因 frame 标签导致页面定位失败,提示 NoSuchElementException 时的,页面元素定位前的 fram ...

  5. 易观OLAP算法大赛结果揭晓,开源组黑马放大招!

    100+天激烈赛程,40+国内顶级技术豪门对决,历经研发内部测试.正式环境测试和易观数据正式环境跑benchmark三大阶段.10月28日,易观OLAP算法大赛优胜名单出炉! 40+技术门派比武 易观 ...

  6. php大力力 [055节] 大力力阅读文章集锦

    php大力力 [055节] 效率低啊,效率低 啥也不说了,先把网页挨个保存一下,关闭网页窗口 从 2015-09-11 10:58 到 2015-09-11 12:38 共用了100分钟,整理最近几天 ...

  7. 深度解析国内O2O模式

    今日在网上发现这篇文章很棒,详细的分析了当前BAT矩阵下的o2o 的模式.所以转载过来与大家一起分享. 文章来自于:http://www.siilu.com/20151214/158917.shtml ...

  8. ebe2

    Email:kefu007@vip.qq.com 软件每天有更新.请用Ctrl+F键搜索您需要的软件..如果你找不到你需要的软件可以联系客户服务人员帮您找! 海拉之光LucidShape光学设计仿真分 ...

  9. 豪情-CSS解构系列之-新浪页面解构-01

    目录: 一. 新浪的布局特点 二. 内容细节的特点 三. 其中相关的一些基础技术点 1. 常见布局方法 2. 布局要点 3. Debugger误区 4.列表 5.字体颜色 6.CSS选择符 7.CSS ...

随机推荐

  1. [转]这五种方法前四种方法只支持IE浏览器,最后一个方法支持当前主流的浏览器(火狐,IE,Chrome,Opera,Safari)

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  2. Android动态禁用或开启屏幕旋转工具

    package com.gwtsz.gts2.util; import android.content.Context; import android.provider.Settings; impor ...

  3. 一个简单的ServletContextListener示例

    ServletContext可以初始化String类型的参数.但是,如果你希望应用初始化参数是一个数据库DataSource呢?上下文参数只能是String.毕竟,你不能把一个Dog对象塞到XML部署 ...

  4. JMS和ActiveMQ的关系

    JMS和MQ的关系: JMS是一个用于提供消息服务的技术规范,它制定了在整个消息服务提供过程中的所有数据结构和交互流程.而MQ则是消息队列服务,是面向消息中间件(MOM)的最终实现,是真正的服务提供者 ...

  5. 【BZOJ2067】[Poi2004]SZN 二分+树上贪心

    [BZOJ2067][Poi2004]SZN Description String-Toys joint-stock 公司需要你帮他们解决一个问题. 他们想制造一个没有环的连通图模型. 每个图都是由一 ...

  6. 通过AnimationSet 同步或一部播放多个动画 Android 属性动画(Property Animation) 完全解析 (下)

    AnimationSet提供了一个把多个动画组合成一个组合的机制,并可设置组中动画的时序关系,如同时播放,顺序播放等. 以下例子同时应用5个动画: 播放anim1: 同时播放anim2,anim3,a ...

  7. ORACLE WITH AS 用法,创建临时表

    语法: with tempName as (select ....) select ... –针对一个别名with tmp as (select * from tb_name) –针对多个别名with ...

  8. netty接收大文件的方法

    参考:http://blog.csdn.net/linuu/article/details/51371595 https://www.jianshu.com/p/a0a51fd79f62 netty默 ...

  9. JAVAWEB基础模块开发顺序与数据访问对象实现类步骤

    一.模块的开发的顺序 1. 定义数据表 2. 新建模型类 3. 新建"add.jsp" 4. 实现AddServlet中的doGet()方法 5. 定义Dao.Service接口 ...

  10. 剑指Offer——数组中重复的数字

    题目描述: 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复的数字. 例如,如果输入长度 ...