- 浏览: 475299 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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)
最近有这么一个需求,就是给出客户需要的总量,然后根据数据库记录的包装规格,计算出客户需要购买的包装规格种类和个数,而且要保证客户的花费最小。
示例图片效果
示例代码实现如下。欢迎大家一起讨论。
代码
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Security;
using System.Reflection;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
decimal area = 110;
Console.WriteLine("你的土地面积是:{0}", area);
decimal amount = 10m;
Console.WriteLine("你的每亩用量是是:{0}", amount);
decimal budget = 0;
decimal budgetMin = 0;
List<product> products = new List<product>();
product product1 = new product()
{
Id = 1,
Name = "土豆",
PkgSpecs = new List<pkgspec>(){
new pkgspec() { amount = 202, price = 120, id = 2 },
new pkgspec() { amount = 300, price = 40, id = 1 },
new pkgspec() { amount = 250, price = 80, id = 3 }}
};
product1.PkgSpecs.Sort(new Comparison<pkgspec>(compareAmountDesc));
products.Add(product1);
product product2= new product (){ Id=1, Name="白菜", PkgSpecs =new List<pkgspec>(){
new pkgspec() { amount = 200, price = 180, id = 2 },
new pkgspec() { amount = 100, price = 100, id = 1 },
new pkgspec() { amount = 250, price = 250, id = 3 }}};
product2.PkgSpecs.Sort(new Comparison<pkgspec>(compareAmountDesc));
products.Add(product2);
product product3= new product (){ Id=1, Name="萝卜", PkgSpecs =new List<pkgspec>(){
new pkgspec() { amount = 200, price = 210, id = 2 },
new pkgspec() { amount = 100, price = 150, id = 1 },
new pkgspec() { amount = 250, price = 220, id = 3 }}};
product3.PkgSpecs.Sort(new Comparison<pkgspec>(compareAmountDesc));
products.Add(product3);
//全部商品需要的购买规格和预算
List<productSelect> proselects = new List<productSelect>();
//最终选中的商品
productSelect proselect = null;
//从一个商品选中的包装
List<pkgselect> pkgselect = null;
//总共的用量
decimal totalAmount = area * amount;
Console.WriteLine("你的总共用量是:{0}", totalAmount);
//选中的包装个数
int num = 0;
foreach (product p in products)
{
//计算一个商品包装规格及用量
budget=0;
totalAmount = area * amount;
pkgselect = new List<pkgselect>();
proselect = new productSelect()
{
Id = p.Id,
PkgSpecs = new List<pkgselect>(),
Budget = budget,
Name = p.Name
};
foreach (pkgspec pkg in p.PkgSpecs )
{
if (totalAmount % pkg.amount == totalAmount)
{
num = 1;
budget += num * pkg.price;
pkgselect.Add(new pkgselect() { id = pkg.id, num = num, price = pkg.price });
break;
}
else if (totalAmount % pkg.amount == 0)
{
num = (int)(totalAmount / pkg.amount);
budget += num * pkg.price;
pkgselect.Add(new pkgselect() { id = pkg.id, num = (int)(totalAmount / pkg.amount), price = pkg.price });
break;
}
else
{
num = (int)(totalAmount / pkg.amount);
budget += num * pkg.price;
pkgselect.Add(new pkgselect() { id = pkg.id, num = num, price = pkg.price });
totalAmount = totalAmount - num * pkg.amount;
continue;
}
}
proselect.PkgSpecs = pkgselect;
proselect.Budget = budget;
proselects.Add(proselect);
}
proselects.Sort(compareBudgetAsc);
foreach (productSelect s in proselects)
{
Console.WriteLine("商品 {0} 需要 {1} 个包装规格,总价是 {2}", s.Name, s.PkgSpecs.Count, s.Budget);
}
Console.WriteLine("最便宜的是商品 {0} ", proselects[0].Name);
foreach (pkgselect s in proselects[0].PkgSpecs)
{
Console.WriteLine("\t规格 {0} , 单价 {1}, 需要购买的数量 {2}", s.id, s.price, s.num);
}
Console.ReadLine();
}
/// <summary>
/// 从低到高
/// </summary>
/// <param name="pkg1"></param>
/// <param name="pkg2"></param>
/// <returns></returns>
private static int compareAmountAsc(pkgspec pkg1, pkgspec pkg2)
{
if (pkg1.amount > pkg2.amount)
return 1;
if (pkg1.amount < pkg2.amount)
return -1;
else
return 0;
}
/// <summary>
/// 从高到低
/// </summary>
/// <param name="pkg1"></param>
/// <param name="pkg2"></param>
/// <returns></returns>
private static int compareAmountDesc(pkgspec pkg1, pkgspec pkg2)
{
if (pkg1.amount < pkg2.amount)
return 1;
if (pkg1.amount > pkg2.amount)
return -1;
else
return 0;
}
/// <summary>
/// 从低到高
/// </summary>
/// <param name="pkg1"></param>
/// <param name="pkg2"></param>
/// <returns></returns>
private static int compareBudgetAsc(productSelect pro1, productSelect pro2)
{
if (pro1.Budget > pro2.Budget) return 1;
if (pro1.Budget < pro2.Budget)
return -1;
else
return 0;
}
/// <summary>
/// 从高到低
/// </summary>
/// <param name="pkg1"></param>
/// <param name="pkg2"></param>
/// <returns></returns>
private static int compareBudgetDesc(productSelect pro1, productSelect pro2)
{
if (pro1.Budget < pro2.Budget) return 1;
if (pro1.Budget > pro2.Budget)
return -1;
else
return 0;
}
}
/// <summary>
/// 选中的包装
/// </summary>
class pkgselect
{
/// <summary>
/// 选中ID
/// </summary>
public int id;
/// <summary>
/// 购买数量
/// </summary>
public int num;
/// <summary>
/// 单价
/// </summary>
public decimal price;
}
/// <summary>
/// 包装类型
/// </summary>
class pkgspec : IComparable<pkgspec>
{
/// <summary>
/// 编号
/// </summary>
public int id;
/// <summary>
/// 包装量
/// </summary>
public decimal amount;
/// <summary>
/// 价格
/// </summary>
public decimal price;
#region IComparable<pkgspec> Members
/// <summary>
/// List<pkgspec>.Sort()默认从低到高
/// </summary>
/// <param name="other"></param>
/// <returns></returns>
public int CompareTo(pkgspec other)
{
if (this.amount > other.amount)
return 1;
if (this.amount == other.amount)
return 0;
else
return -1;
}
#endregion
}
/// <summary>
/// 代售商品
/// </summary>
class product
{
/// <summary>
/// 商品ID
/// </summary>
public int Id { set; get; }
/// <summary>
/// 商品名称
/// </summary>
public string Name { set; get; }
/// <summary>
/// 商品包装规格
/// </summary>
public List<pkgspec> PkgSpecs { set; get; }
}
/// <summary>
/// 选中的商品
/// </summary>
class productSelect : IComparable<productSelect>
{/// <summary>
/// 商品ID
/// </summary>
public int Id { set; get; }
/// <summary>
/// 商品名称
/// </summary>
public string Name { set; get; }
/// <summary>
/// 需要购买的包装规格
/// </summary>
public List<pkgselect> PkgSpecs { set; get; }
/// <summary>
/// 总价
/// </summary>
public decimal Budget { get; set; }
#region IComparable<productSelect> Members
/// <summary>
/// List<productSelect>.Sort()默认从低到高
/// </summary>
/// <param name="other"></param>
/// <returns></returns>
public int CompareTo(productSelect other)
{
if (this.Budget > other.Budget)
return 1;
if (this.Budget < other.Budget)
return -1;
else
return 0;
}
#endregion
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Security;
using System.Reflection;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
decimal area = 110;
Console.WriteLine("你的土地面积是:{0}", area);
decimal amount = 10m;
Console.WriteLine("你的每亩用量是是:{0}", amount);
decimal budget = 0;
decimal budgetMin = 0;
List<product> products = new List<product>();
product product1 = new product()
{
Id = 1,
Name = "土豆",
PkgSpecs = new List<pkgspec>(){
new pkgspec() { amount = 202, price = 120, id = 2 },
new pkgspec() { amount = 300, price = 40, id = 1 },
new pkgspec() { amount = 250, price = 80, id = 3 }}
};
product1.PkgSpecs.Sort(new Comparison<pkgspec>(compareAmountDesc));
products.Add(product1);
product product2= new product (){ Id=1, Name="白菜", PkgSpecs =new List<pkgspec>(){
new pkgspec() { amount = 200, price = 180, id = 2 },
new pkgspec() { amount = 100, price = 100, id = 1 },
new pkgspec() { amount = 250, price = 250, id = 3 }}};
product2.PkgSpecs.Sort(new Comparison<pkgspec>(compareAmountDesc));
products.Add(product2);
product product3= new product (){ Id=1, Name="萝卜", PkgSpecs =new List<pkgspec>(){
new pkgspec() { amount = 200, price = 210, id = 2 },
new pkgspec() { amount = 100, price = 150, id = 1 },
new pkgspec() { amount = 250, price = 220, id = 3 }}};
product3.PkgSpecs.Sort(new Comparison<pkgspec>(compareAmountDesc));
products.Add(product3);
//全部商品需要的购买规格和预算
List<productSelect> proselects = new List<productSelect>();
//最终选中的商品
productSelect proselect = null;
//从一个商品选中的包装
List<pkgselect> pkgselect = null;
//总共的用量
decimal totalAmount = area * amount;
Console.WriteLine("你的总共用量是:{0}", totalAmount);
//选中的包装个数
int num = 0;
foreach (product p in products)
{
//计算一个商品包装规格及用量
budget=0;
totalAmount = area * amount;
pkgselect = new List<pkgselect>();
proselect = new productSelect()
{
Id = p.Id,
PkgSpecs = new List<pkgselect>(),
Budget = budget,
Name = p.Name
};
foreach (pkgspec pkg in p.PkgSpecs )
{
if (totalAmount % pkg.amount == totalAmount)
{
num = 1;
budget += num * pkg.price;
pkgselect.Add(new pkgselect() { id = pkg.id, num = num, price = pkg.price });
break;
}
else if (totalAmount % pkg.amount == 0)
{
num = (int)(totalAmount / pkg.amount);
budget += num * pkg.price;
pkgselect.Add(new pkgselect() { id = pkg.id, num = (int)(totalAmount / pkg.amount), price = pkg.price });
break;
}
else
{
num = (int)(totalAmount / pkg.amount);
budget += num * pkg.price;
pkgselect.Add(new pkgselect() { id = pkg.id, num = num, price = pkg.price });
totalAmount = totalAmount - num * pkg.amount;
continue;
}
}
proselect.PkgSpecs = pkgselect;
proselect.Budget = budget;
proselects.Add(proselect);
}
proselects.Sort(compareBudgetAsc);
foreach (productSelect s in proselects)
{
Console.WriteLine("商品 {0} 需要 {1} 个包装规格,总价是 {2}", s.Name, s.PkgSpecs.Count, s.Budget);
}
Console.WriteLine("最便宜的是商品 {0} ", proselects[0].Name);
foreach (pkgselect s in proselects[0].PkgSpecs)
{
Console.WriteLine("\t规格 {0} , 单价 {1}, 需要购买的数量 {2}", s.id, s.price, s.num);
}
Console.ReadLine();
}
/// <summary>
/// 从低到高
/// </summary>
/// <param name="pkg1"></param>
/// <param name="pkg2"></param>
/// <returns></returns>
private static int compareAmountAsc(pkgspec pkg1, pkgspec pkg2)
{
if (pkg1.amount > pkg2.amount)
return 1;
if (pkg1.amount < pkg2.amount)
return -1;
else
return 0;
}
/// <summary>
/// 从高到低
/// </summary>
/// <param name="pkg1"></param>
/// <param name="pkg2"></param>
/// <returns></returns>
private static int compareAmountDesc(pkgspec pkg1, pkgspec pkg2)
{
if (pkg1.amount < pkg2.amount)
return 1;
if (pkg1.amount > pkg2.amount)
return -1;
else
return 0;
}
/// <summary>
/// 从低到高
/// </summary>
/// <param name="pkg1"></param>
/// <param name="pkg2"></param>
/// <returns></returns>
private static int compareBudgetAsc(productSelect pro1, productSelect pro2)
{
if (pro1.Budget > pro2.Budget) return 1;
if (pro1.Budget < pro2.Budget)
return -1;
else
return 0;
}
/// <summary>
/// 从高到低
/// </summary>
/// <param name="pkg1"></param>
/// <param name="pkg2"></param>
/// <returns></returns>
private static int compareBudgetDesc(productSelect pro1, productSelect pro2)
{
if (pro1.Budget < pro2.Budget) return 1;
if (pro1.Budget > pro2.Budget)
return -1;
else
return 0;
}
}
/// <summary>
/// 选中的包装
/// </summary>
class pkgselect
{
/// <summary>
/// 选中ID
/// </summary>
public int id;
/// <summary>
/// 购买数量
/// </summary>
public int num;
/// <summary>
/// 单价
/// </summary>
public decimal price;
}
/// <summary>
/// 包装类型
/// </summary>
class pkgspec : IComparable<pkgspec>
{
/// <summary>
/// 编号
/// </summary>
public int id;
/// <summary>
/// 包装量
/// </summary>
public decimal amount;
/// <summary>
/// 价格
/// </summary>
public decimal price;
#region IComparable<pkgspec> Members
/// <summary>
/// List<pkgspec>.Sort()默认从低到高
/// </summary>
/// <param name="other"></param>
/// <returns></returns>
public int CompareTo(pkgspec other)
{
if (this.amount > other.amount)
return 1;
if (this.amount == other.amount)
return 0;
else
return -1;
}
#endregion
}
/// <summary>
/// 代售商品
/// </summary>
class product
{
/// <summary>
/// 商品ID
/// </summary>
public int Id { set; get; }
/// <summary>
/// 商品名称
/// </summary>
public string Name { set; get; }
/// <summary>
/// 商品包装规格
/// </summary>
public List<pkgspec> PkgSpecs { set; get; }
}
/// <summary>
/// 选中的商品
/// </summary>
class productSelect : IComparable<productSelect>
{/// <summary>
/// 商品ID
/// </summary>
public int Id { set; get; }
/// <summary>
/// 商品名称
/// </summary>
public string Name { set; get; }
/// <summary>
/// 需要购买的包装规格
/// </summary>
public List<pkgselect> PkgSpecs { set; get; }
/// <summary>
/// 总价
/// </summary>
public decimal Budget { get; set; }
#region IComparable<productSelect> Members
/// <summary>
/// List<productSelect>.Sort()默认从低到高
/// </summary>
/// <param name="other"></param>
/// <returns></returns>
public int CompareTo(productSelect other)
{
if (this.Budget > other.Budget)
return 1;
if (this.Budget < other.Budget)
return -1;
else
return 0;
}
#endregion
}
}
发表评论
-
《深入浅出设计模式-中文版》读书笔记 策略模式(二)
2010-07-02 07:25 754接着上回的“针对接口编程,不针对实现编程”原则说。 假 ... -
《深入浅出设计模式-中文版》读书笔记 策略模式(二)
2010-07-02 07:25 703接着上回的“针对接口编程,不针对实现编程”原则说。 假 ... -
NET 应用架构指导 V2 学习笔记(十二) 业务逻辑层的设计步骤
2010-06-01 00:07 459部署方面的考虑 当部署业务逻辑层的时候,一定要考虑生产 ... -
NET 应用架构指导 V2 学习笔记(二十一) 设计业务实体
2010-06-08 07:05 436概况 业务实体 ... -
分页存储过程(五)在MS SQL Server中打造更加准确,且有一点效率提升的的分页结果
2010-06-08 08:38 530以前的分页我都是 ... -
NET 应用架构指导 V2 学习笔记(二十二) 设计数据访问组件
2010-06-09 06:53 409概况 数据层组 ... -
Silverlight3+WCF遇到的问题(一):调试资源字符串不可用。密钥和参数通常提供足够的信息用以诊断该问题
2010-01-21 10:48 1405我在windows2003 R2上面开发Silve ... -
Silverlight3+WCF遇到的问题(二):wcf system.servicemodel.communicationexception
2010-01-28 13:43 615以前我访问的数据库都是一张表,没有关联,昨天添加了两张 ... -
Silverlight3系列(九)Silverlight 及其相关技术简介
2010-02-09 10:51 7301、Silverlight应用类型 •RIA Rich I ... -
【转载】利用SQL的charindex实现字符串数组和Split函数
2010-03-13 12:57 1083大家在T-SQL中使用substring的时候需要注意一点 ... -
根据总用量计算每种包装规格的购买量和总价
2010-03-23 12:36 446最近有这么一个需求,就是给出客户需要的总量,然后根据 ... -
Silverlight3+WCF遇到的问题(一):调试资源字符串不可用。密钥和参数通常提供足够的信息用以诊断该问题
2010-01-21 10:48 3237我在windows2003 R2上面开发Silve ... -
Silverlight3+WCF遇到的问题(二):wcf system.servicemodel.communicationexception
2010-01-28 13:43 703以前我访问的数据库都是一张表,没有关联,昨天添加了两张 ... -
Silverlight3系列(九)Silverlight 及其相关技术简介
2010-02-09 10:51 5851、Silverlight应用类型 •RIA Rich I ... -
【转载】利用SQL的charindex实现字符串数组和Split函数
2010-03-13 12:57 817大家在T-SQL中使用substring的时候需要注意一点 ... -
根据总用量计算每种包装规格的购买量和总价
2010-03-23 12:36 437最近有这么一个需求,就是给出客户需要的总量,然后根据 ... -
Silverlight3+WCF遇到的问题(一):调试资源字符串不可用。密钥和参数通常提供足够的信息用以诊断该问题
2010-01-21 10:48 2098我在windows2003 R2上面开发Silve ... -
Silverlight3+WCF遇到的问题(二):wcf system.servicemodel.communicationexception
2010-01-28 13:43 778以前我访问的数据库都是一张表,没有关联,昨天添加了两张 ... -
Silverlight3系列(九)Silverlight 及其相关技术简介
2010-02-09 10:51 6951、Silverlight应用类型 •RIA Rich I ... -
【转载】利用SQL的charindex实现字符串数组和Split函数
2010-03-13 12:57 944大家在T-SQL中使用substring的时候需要注意一点 ...
相关推荐
一款三角网法计算疏浚工程及吹填区吹填工程量计算软件,计算速度很快。
SQL语句在审计的简单应用
Java Web应用开发 35 课堂案例-调用存储过程统计商品总价.docx 学习资料 复习资料 教学资源
输入苹果的单价及购买的数量,计算总价,分别显示总价的总价整数部分和四舍五入部后的整数部分
快速订购与显示购买量与浏览数
jsp的session实现购物车功能,显示商品,购买商品,结算,在MYELIPSE导入即可运行。
客户购买量调查表
给定每种图书购买的数量,编程计算应付的总费用。 【输入】 输入一行,包含10个整数(大于等于0,小于等于100),分别表示购买的《计算概论》、《数据结构与算法》、《数字逻辑》、《C++程序设计教程》、《人工智能》...
顾客购买量调查表.doc
先根据给出的1000位会员对每种DVD的满意度求出每种DVD 的需求人数,利用第一问虽小购买量与会员 需求量成正比关系的结论,运用计算机模拟的方法,先确定一较小的购买量,再用贪婪算法作为策略进行分 配,计算满意的...
给定一个购物清单,计算这些物品的总成本。 提出了两种解决方案: 购物计算器 使用 observables,但除此之外是最简单的事情。 通用计算器 使用 observables,但也抽象出与 BasketItem 对象中的每个项目相关联的...
顾客购买量调查表格式.doc
仿美团外卖点击加号增加购买的数量点击减号减少购买数量并显示当前购买的总价.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
1、圆柱齿轮计算包括:设计计算、几何计算、精度计算、圆柱齿轮副极限侧隙计算、齿轮强度校核(包括开式传动)、 NGW型行星头几何参数及动力参数的确定、摆线齿轮齿形坐标计算、太阳轮齿向修形计算、双联齿轨轮齿形坐标...
创建两个顾客对象,分别购买啤酒、方便面和矿泉水,输出顾客名称和购买商品的详细清单,以及最终的总价。.docx
网页广告数据集(年龄+性别+薪资+点击量+询问量+购买量)主要适用于词频统计分析等训练场景,共一千一百余条数据
论文研究-基于计算实验的有限理性消费者绿色购买行为.pdf, 有限理性消费者在绿色购买行为中存在明显的态度-行为缺口.以某绿色非食品类环保友好商品为例,对消费者绿色...
1、详细的DTⅡ型皮带机选型计算软件,输入参数带宽、物料密度、带速、皮带机长度、提升高度后,可以快速计算出皮带机的驱动力、驱动功率、阻力等参数; 2、在输入参数时,需注意应把选择或填写所有的参数数据,否则...