- 浏览: 496296 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (1028)
- [发布至博客园首页] (826)
- [随笔分类]个人生活随笔 (14)
- [网站分类]首页候选区 (26)
- [网站分类]SharePoint (15)
- [网站分类]其他技术区 (6)
- [随笔分类]批处理技巧 (6)
- [随笔分类].net 2.0 (3)
- [随笔分类]SharePoint2007(MOSS2007) (0)
- [网站分类].NET新手区 (6)
- [网站分类]ASP.NET (6)
- [网站分类]架构设计 (18)
- [网站分类]程序人生 (2)
- [网站分类]SQL Server (2)
- WCF (3)
- 编程技巧 (2)
- 模式架构 (2)
- 分析设计 (4)
- 生活随笔 (0)
- 软件工程 (1)
- Android实例 (2)
最新评论
-
zilong0536:
楼主您好:
请问发表博文支持图片的功能怎么实现啊,一直没有思路 ...
新浪微博开放平台开发-android客户端(3) -
nicegege:
小弟 学习了
帮助中国移动设计10086的排队小模块 -
zl7824516:
用什么技术没说啊
通告(公告),消息(站内短信),提醒的设计:通告 -
virusswb:
源码下载: SinaWeibo2 源码下载之后,将后缀改为ra ...
新浪微博开放平台开发-android客户端(3) -
Jimmyxu0311:
找不到源码下载
新浪微博开放平台开发-android客户端(3)
在根据总用量计算每种包装规格的购买量和总价 中讲述了一个开发的场景,首先有一个总共的土地拥有量:total亩,现在有n种可以选择的商品,每一种商品都有每亩的用量:amount/亩,每一种商品都有多个包装规格,每个包装规格有自己的包装量和售价。
需求就是计算出,在给定土地上面种植那种商品需要的花费最少,也就是可以用最少的钱来买更多的东西种地,满足我种地的最大需求量。
其实我们还假设了一个前提,就是包装大的单价低,好比100克每包的可能买100元,200克每包的就应该卖180元,肯定会小于两个100克每包的价格,这个也是市场调研的结果,也比较符合市场常规。
代码中用到了二分搜索法的思路,其实我需要的是一个定位,定位我需要购买的最合算的包装规格,也就是在满足需要的情况下,尽可能购买大包装。
例如:现在有两个商品,土豆和白菜,土豆有三个规格,100克每包的100元,200克每包的180元,300克每包的240元;白菜有四个规格,100克每包的70元,200克每包的130元,300克每包的200元,400克每包的300元。种白菜每亩要100斤,中土豆每亩尧200斤。我总共有1029亩地,计算一下,是种土豆花费少?还是种白菜花费少?
有两个点要注意:1)找位置,找到我需要购买的最合算的包装规格的位置,使用了二分搜索2)计算用量和预算。
计算一种商品最少花费的伪代码如下:
输入:一个商品的信息,包括包装规格
输出:需要购买的包装规格几个数,总共的花费
计算过程:
{
while(总量>最小包装规格的量)
{
1)找位置,定位包装规格
2)计算需要购买多少个第一步找到的包装规格
3)需要购买的个数=总量和包装规格的包装量取整
4)总量=总量-需要购买的个数*包装规格的包装量
5)这种商品的预算+=需要购买的个数*包装规格的单价
}
if(总量<=最小包装规格的量)
{
说明零头就只能买个最小包装了,因为购买不支持散买。
}
}
示例代码下载:/Files/virusswb/BeautyCode.ConApp.rar
代码如下:
* Created by SharpDevelop.
* User: haier
* Date: 2010-3-23
* Time: 22:19
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections.Generic;
namespace BeautyCode.ConApp
{
/// <summary>
/// 种植方案
/// </summary>
public class PlantArea
{
/// <summary>
/// 种植面积,单位是亩
/// </summary>
public static decimal PlantAreaAmount=175.25m;
}
/// <summary>
/// 商品类型
/// </summary>
public enum ProductType
{
/// <summary>
/// 种子
/// </summary>
Seed,
/// <summary>
/// 肥料
/// </summary>
Fertilizer,
/// <summary>
/// 农药
/// </summary>
Pesticide
}
public enum FertType
{
/// <summary>
/// 底肥
/// </summary>
DiF,
/// <summary>
/// 种肥
/// </summary>
ZhongF,
/// <summary>
/// 追肥
/// </summary>
ZhuiF
}
public class Unit
{
public Guid ID{set;get;}
public string CnName{set;get;}
}
public class PkgPrice
{
public Guid PkgID{set;get;}
/// <summary>
/// 包装量
/// </summary>
public decimal PkgAmount{set;get;}
/// <summary>
/// 包装单位
/// </summary>
public Unit PkgUnit{set;get;}
/// <summary>
/// 包装价格
/// </summary>
public decimal Price{set;get;}
/// <summary>
/// 选中的包装个数
/// </summary>
public int Quantities{set;get;}
}
public class Product
{
public virtual Guid ID{set;get;}
public virtual string Name{set;get;}
public virtual ProductType ProType{set;get;}
/// <summary>
/// 每亩用量
/// </summary>
public virtual decimal Amount{set;get;}
/// <summary>
/// 每亩用量单位
/// </summary>
public virtual Unit ProductUnit{set;get;}
/// <summary>
/// 总用量
/// </summary>
public virtual decimal TotalAmount{set;get;}
public Product (ProductType type)
{
this.ProType=type;
}
/// <summary>
/// 预算
/// </summary>
public decimal Budget{set;get;}
/// <summary>
/// 全部包装类型
/// </summary>
public List<PkgPrice > AllPkgPrice{set;get;}
/// <summary>
/// 选中的包装类型
/// </summary>
public List<PkgPrice > SelectPkgPrice{set;get;}
}
public class Seed:Product
{
public Seed ():base(ProductType.Seed ){}
public List<Pesticide > Pesticides{set;get;}
public List<DiF > DiFs{set;get;}
public List<ZhongF >ZhongFs{set;get;}
public List<ZhuiF >ZhuiFs{set;get;}
}
public class Fertilizer:Product
{public FertType FType{set;get;}
public Fertilizer (FertType type):base (ProductType.Fertilizer){
this.FType=type ;
}
}
public class DiF:Fertilizer
{
public DiF ():base (FertType.DiF ){}
}
public class ZhongF:Fertilizer
{
public ZhongF ():base (FertType .ZhongF ){}
}
public class ZhuiF:Fertilizer
{
public ZhuiF ():base (FertType.ZhuiF ){}
}
public class Pesticide:Product
{
public Pesticide ():base(ProductType.Pesticide ){}
}
/// <summary>
/// Description of BeiBao.
/// </summary>
public class BeiBao
{
public List<Seed >Seeds=null;
public Seed Seed=null;
public List<Pesticide >Pesticides=null;
public Pesticide Pesticide=null;
public List<DiF >DiFs=null;
public DiF DiF=null;
public List<ZhongF >ZhongFs=null;
public ZhongF ZhongF=null;
public List<ZhuiF >ZhuiFs=null;
public ZhuiF ZhuiF=null;
public List<PkgPrice > PkgPrices=null;
public BeiBao()
{
Seeds =new List<Seed >();
Seed =new Seed(){ ID=Guid.NewGuid (),
Name="土豆", Amount =120, Budget=0,
TotalAmount =120*PlantArea.PlantAreaAmount };
PkgPrices =new List<PkgPrice>(){
new PkgPrice (){ PkgID=Guid.NewGuid (),PkgAmount =100, Price=23},
new PkgPrice (){ PkgID=Guid.NewGuid (),PkgAmount =210, Price=58},
new PkgPrice (){ PkgID=Guid.NewGuid (),PkgAmount =130, Price=39}};
Seed .AllPkgPrice =PkgPrices ;
Seed.AllPkgPrice.Sort(new Comparison<PkgPrice >(comparePkgAmountAsc));
Seeds.Add(Seed );
Seed =new Seed(){ ID=Guid.NewGuid (),
Name="白菜", Amount =150, Budget=0, TotalAmount =150*PlantArea.PlantAreaAmount };
PkgPrices =new List<PkgPrice>(){
new PkgPrice (){ PkgID=Guid.NewGuid (),PkgAmount =80, Price=20},
new PkgPrice (){ PkgID=Guid.NewGuid (),PkgAmount =180, Price=48},
new PkgPrice (){ PkgID=Guid.NewGuid (),PkgAmount =110, Price=34}};
Seed .AllPkgPrice =PkgPrices ;
Seed.AllPkgPrice.Sort(new Comparison<PkgPrice >(comparePkgAmountAsc));
Seeds.Add(Seed );
Seed =new Seed(){ ID=Guid.NewGuid (),
Name="萝卜", Amount =100, Budget=0, TotalAmount =100*PlantArea.PlantAreaAmount };
PkgPrices =new List<PkgPrice>(){
new PkgPrice (){ PkgID=Guid.NewGuid (),PkgAmount =110, Price=35},
new PkgPrice (){ PkgID=Guid.NewGuid (),PkgAmount =250, Price=79},
new PkgPrice (){ PkgID=Guid.NewGuid (),PkgAmount =170, Price=49}};
Seed .AllPkgPrice =PkgPrices ;
Seed.AllPkgPrice.Sort(new Comparison<PkgPrice >(comparePkgAmountAsc));
Seeds.Add(Seed );
Seed =new Seed(){ ID=Guid.NewGuid (),
Name="大豆", Amount =20, Budget=0, TotalAmount =20*PlantArea.PlantAreaAmount };
PkgPrices =new List<PkgPrice>(){
new PkgPrice (){ PkgID=Guid.NewGuid (),PkgAmount =110, Price=35},
new PkgPrice (){ PkgID=Guid.NewGuid (),PkgAmount =250, Price=79},
new PkgPrice (){ PkgID=Guid.NewGuid (),PkgAmount =170, Price=49}};
Seed .AllPkgPrice =PkgPrices ;
Seed.AllPkgPrice.Sort(new Comparison<PkgPrice >(comparePkgAmountAsc));
Seeds.Add(Seed );
}
public Product ComputeOptimized()
{
foreach (Product p in this.Seeds )
{
GetTotalBudget ( p);
}
Seeds.Sort (new Comparison<Seed >(compareProductBudgetAsc ));
return Seeds[0];
}
private void GetTotalBudget(Product p)
{
p.SelectPkgPrice=new List<PkgPrice>();
int index=-1;
int quantities=0;
decimal totalamount=p.TotalAmount;
while (totalamount >p.AllPkgPrice [0].PkgAmount )
{
index =binaryLocalize (p.AllPkgPrice,totalamount,p.AllPkgPrice.Count );
if(index !=-1)
{
quantities =(int)(totalamount /p.AllPkgPrice [index ].PkgAmount );
//quantities =(int)(totalamount %p.AllPkgPrice [index ].PkgAmount );
p.SelectPkgPrice.Add(new PkgPrice (){
PkgID=p.AllPkgPrice[index].PkgID ,
PkgAmount=p.AllPkgPrice[index].PkgAmount,
Price=p.AllPkgPrice[index].Price ,
Quantities=quantities
});
p.Budget +=quantities *p.AllPkgPrice[index].Price ;
}
totalamount -=quantities *p.AllPkgPrice[index].PkgAmount;
}
if(totalamount !=0)
{
quantities =1;
index =0;
p.SelectPkgPrice.Add(new PkgPrice (){
PkgID=p.AllPkgPrice[index].PkgID ,
PkgAmount=p.AllPkgPrice[index].PkgAmount,
Price=p.AllPkgPrice[index].Price ,
Quantities=quantities
});
p.Budget +=quantities *p.AllPkgPrice[index].Price ;
}
}
/// <summary>
/// 二分法搜索元素
/// </summary>
/// <param name="a"></param>
/// <param name="x"></param>
/// <param name="n"></param>
/// <returns></returns>
private int binarySearch(List<int >a,int x,int n)
{
int left=0;
int right=n-1;
while (left <=right)
{
int middle=(left +right )/2;
if(x==a[middle])return middle;
if(x>a[middle ])left =middle +1;
else right =middle -1;
}
//没有找到
return -1;
}
/// <summary>
/// 二分法定位规格
/// </summary>
/// <param name="pkgPrices"></param>
/// <param name="totalAmount"></param>
/// <param name="n"></param>
/// <returns></returns>
private int binaryLocalize(List<PkgPrice > pkgPrices,decimal totalAmount,int n)
{
if(totalAmount >=pkgPrices [n-1].PkgAmount )
return n-1;
int left=0;
int right=n-1;
while (left <=right )
{
int middle=(left+right )/2;
if(totalAmount >=pkgPrices [middle ].PkgAmount &&totalAmount <pkgPrices [middle +1].PkgAmount )
{
return middle ;
}
if(totalAmount ==pkgPrices [middle +1].PkgAmount )
{
return middle +1;
}
if(totalAmount >pkgPrices [middle +1].PkgAmount )
left =middle +1;
else
right =middle -1;
}
return -1;
}
private int compareProductBudgetAsc(Product pro1,Product pro2)
{
if(pro1.Budget>pro2 .Budget )
return 1;
if(pro1.Budget<pro2 .Budget )
return -1;
else
return 0;
}
private int comparePkgAmountAsc(PkgPrice pkg1,PkgPrice pkg2)
{
if(pkg1.PkgAmount >pkg2.PkgAmount )
return 1;
if(pkg1.PkgAmount <pkg2 .PkgAmount )
return -1
发表评论
-
NET 应用架构指导 V2 学习笔记(十六) 服务层设计指导
2010-06-04 00:13 548如果你的应用是通 ... -
NET 应用架构指导 V2 学习笔记(十七) 组件设计指导
2010-06-05 00:48 672组件提供了一种将 ... -
NET 应用架构指导 V2 学习笔记(十八) 表现层组件设计指导
2010-06-05 21:09 529本章讲述的是你在设计用户界面组件和表现层逻辑组件的时候应该 ... -
NET 应用架构指导 V2 学习笔记(十九) 表现层组件设计指导
2010-06-06 06:15 5955 决定数据绑定的 ... -
NET 应用架构指导 V2 学习笔记(二十) 业务组件设计指导
2010-06-07 06:58 616前言 业务组件 ... -
微软企业库5.0学习笔记(四十二)异常处理模块
2010-06-14 00:04 839企业库的异常处理 ... -
关于程序员在30岁、35岁之后怎么办的新思考
2010-06-14 10:40 625首先给大家问个好 ... -
NET 应用架构指导 V2 学习笔记(二十四) 跨层关注问题
2010-06-17 20:00 595概况 大部分的 ... -
微软企业库5.0学习笔记(四十三)数据验证模块
2010-06-19 08:07 999概况 任何接受用户或者是其他系统输入的应用,一定要确保 ... -
关于项目进度慢的思考----如何提高整体开发效率
2010-06-21 23:42 806我们都是软件行业 ... -
微软企业库5.0学习笔记(四十四)实战数据验证模块
2010-06-23 19:22 8421 在业务对象上添加验证 添加对程序集【Microso ... -
微软企业库5.0学习笔记(四十五)实战数据验证模块----高级篇
2010-06-24 19:41 9711、添加自定义的提示信息 验证失败的提示信息可以自定义 ... -
面向对象类设计的五大原则(一)单一职责原则Single Responsibility Principle
2010-06-29 15:45 778引言 面向对象类设计,或者说是面向对象设计,有五大原则 ... -
《深入浅出设计模式-中文版》读书笔记 开篇乱弹(一)
2010-07-01 06:42 652oreilly的《Head.First ... -
《深入浅出设计模式-中文版》读书笔记-继承与组合(三)
2010-07-03 16:53 606经过上一次的改造 ... -
《深入浅出设计模式-中文版》读书笔记-观察者模式(四)
2010-07-06 06:34 635今天要接触的是观 ... -
利用attribute实现简单的ORM
2010-07-09 15:27 683我不知道NH的ORM具 ... -
系统内部模块(子系统)之间的耦合以及模块(子系统)划分
2010-07-14 13:02 807题外话 最近已经在努力学习了,学习基本功,学习设计模式 ... -
《深入浅出设计模式-中文版》读书笔记-工厂模式(五)
2010-07-16 12:46 699今天给大家带来的是:工厂模式。 我们在代码中创建一个对 ... -
Head.First.Object-Oriented.Design.and.Analysis《深入浅出面向对象的分析与设计》读书笔记(一)
2010-07-18 21:47 671题外话 又是一本Head.First系列的书,这个系列 ...
相关推荐
《工程量计算稿》是一款专为建筑工程领域设计的软件,其1.55版本进一步提升了用户体验,通过简化操作流程和引入自动汇总功能,使得工程量的计算与管理变得更加高效便捷。这款工具对于工程师、造价员以及相关从业者来...
工程量计算稿1.55是一款专用于建筑工程领域进行工程量计算的专业软件。这款软件集成了最新的工程计算规则和标准,旨在帮助工程师、造价师以及建筑行业的从业者高效准确地完成工程项目的成本估算和预算编制。它包含了...
疏浚吹填工程是海洋与港口建设中的关键环节,...总的来说,“疏浚吹填工程量计算程序”是工程技术人员的重要辅助工具,它的应用使得疏浚吹填工程的计算工作更加科学化、规范化,提高了整个项目的管理效率和经济效益。
4. **输出结果**:最后输出 `g[n][a]`,即购买 `n` 个第一类商品和 `a` 个第二类商品时的最少花费。 #### 代码逻辑分析 该算法的主要逻辑可以概括为以下步骤: 1. **初始化**:设置变量并初始化二维数组 `g`。 2. ...
总的来说,这个简单的购物车实现计算项目展示了如何利用JSP和session来实现一个基本的电商购物车功能,涉及到了用户交互、状态管理、数据计算等多个关键环节。对于初学者来说,这是一个很好的实践项目,可以帮助他们...
SELECT语句的作用是让数据库服务器根据用户的要求搜索出所需要的信息资料,并按规定的格式进行整理,再返回给用户。 一、SELECT语句的基本组件和描述: * SELECT:指明要检索的数据的列。 * FROM:指明从哪(几)...
本篇文章将深入探讨如何运用C++编程语言来设计和实现一个高效的算法,以解决最少费用购物问题。 #### 问题背景与定义 最少费用购物问题通常涉及多个商品种类,每个商品有其特定的价格、可购买数量以及可能存在的...
- 总价 ÷ 数量 = 单价:如果已知总花费和购买的物品数量,可以计算出单个物品的价格。 - 总价 ÷ 单价 = 数量:当知道总花费和单价时,可以计算出购买的物品数量。 2. **看图列式计算**: - 学生需要观察图片中...
在开发电商网站时,购物车功能是至关重要的一个部分,它需要实时地更新商品数量、单价和总价,以便用户能够清楚地了解他们的购物选择。在这个主题中,"jQuery购物车自动计算金额表单多数据加减商城购物结算"涉及到的...
【jQuery购物车自动计算金额表单】是一个基于jQuery技术实现的简单购物车功能,它能够自动计算用户在购物车中选择商品的总价。这个功能在电商网站中非常常见,为用户提供了一个直观的方式来查看他们所选商品的总价值...
10. 营销策略:根据调查结果,企业可以调整广告宣传、促销活动和优惠策略,以刺激购买量,提升人均花费,从而提高整体业绩。 总的来说,"顾客购买量调查表"提供了关于消费者购买行为的关键信息,对于优化企业运营,...
动态规划的思想是,通过构建一个二维数组来存储每种商品的购买成本和优惠策略信息,然后使用贪心算法来找到最小化总成本的购买方案。 给定的代码是一个完整的解决最少费用问题的算法设计方案,该方案可以广泛应用于...
用户在选择商品时,可以根据这些规格进行筛选和购买。在后台系统中,管理员需要能够方便地添加、编辑和管理这些规格,包括设置不同的规格项和对应的值。 JavaScript和jQuery在这其中起到了关键作用。JavaScript是一...
5. 根据平均每天的销售量,计算一个月的总销售量。 通过这些练习题,学生不仅能掌握单价、数量和总价的概念,还能提升解决实际问题的能力,训练逻辑思维和运算技巧。这些基础知识对于日常生活和进一步的数学学习至...
反之,如果小明知道他总共花费了20元购买铅笔,而每支铅笔的单价为2元,可以通过除法计算出购买的铅笔数量: - **总价**:20元 - **单价**:2元/支 - **数量**:20元 ÷ 2元/支 = 10支 以上就是关于单价、数量和...
顾客购买量调查表是一种有效的工具,用于收集和分析消费者对特定商品或服务的购买习惯。这种表格可以帮助企业更好地理解市场需求,优化产品策略,提升销售业绩,并制定更精确的市场营销计划。 在“顾客购买量调查表...
这个功能通常涉及到用户交互、数量控制以及总价计算,是电商应用程序中的核心组件之一。 在实际的美团外卖应用中,用户可以通过点击“+”号增加商品的数量,或者通过点击“-”号减少已选择的商品数量。这个过程应该...
顾客购买量调查表是一种有效的方法,用于收集和分析消费者的购物习惯,以便优化产品策略、提升销售额和提高客户满意度。这份"顾客购买量调查表(表格模板、DOC格式)"文档提供了一个标准化的框架,企业可以依据此...
在电子商务网站中,购物车是用户进行商品选购的核心功能之一,它承载了用户选择的商品、数量、价格等信息。本文将深入探讨“购物车全选计算价格、删除及变状态”这一主题,以帮助理解购物车系统的关键实现原理。 1....