脚本宝典收集整理的这篇文章主要介绍了已知总数和几个商品总价,查找每个商品各取几个可以最接近或等于总价,实现程序,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace ConsoleApp1 { class Program { static void Main(string[] args) { //10个试剂 var materialList = new List<Material>(); for(int i=0;i<10; i++) { var material = new Material() { Code = i + 1, Name = "Material" + (i + 1).ToString(), Price = (i+1), }; materialList.Add(material); material.QtyList = new List<int>(); int j = 0; //最多取20个 while(j<=20) { material.QtyList.Add(j); j++; } } Console.WriteLine($"MaterialList = {Newtonsoft.Json.JsonConvert.SerializeObject(materialList)}"); decimal total = 0; plus(new Diff(), materialList, total); var diff = DiffList.OrderBy(p => p.DiffAmt).FirstOrDefault(); Console.ReadLine(); } public static int totalAmount = 555; public static List<Diff> DiffList = new List<Diff>(); public static bool flag = false; public static void plus(Diff diff, List<Material> materialList, decimal total) { if (flag) return; if (materialList != null && materialList.Any()) { var material = materialList.First(); var list = materialList.Where(p=>p.Code != material.Code).ToList(); foreach (var qty in material.QtyList) { if (flag) break; if(totalAmount >= material.Price * qty + total) { var oldTotal = total; oldTotal += material.Price * qty; UpdateDiff(diff, material.Code, qty); if(list.Any()) plus(diff, list, oldTotal); else { diff.DiffAmt = totalAmount - oldTotal; DiffList.Add(new Diff() { Number1 = diff.Number1, Number2 = diff.Number2, Number3 = diff.Number3, Number4 = diff.Number4, Number5 = diff.Number5, Number6 = diff.Number6, Number7 = diff.Number7, Number8 = diff.Number8, Number9 = diff.Number9, Number10 = diff.Number10, DiffAmt = diff.DiffAmt }); Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(diff)); if (diff.DiffAmt == 0) { flag = true; break; } } } } } } public static void UpdateDiff(Diff diff, int index, int qty) { var propName = "Number" + index.ToString(); if(diff.GetType().GetProperty(propName) != null) { diff.GetType().GetProperty(propName).SetValue(diff, qty); } } public static void showLog(List<int> list) { string str = string.Join(",", list.ToArray()); Console.WriteLine(str); } } public class Material { public int Code { get; set; } public string Name { get; set; } public decimal Price { get; set; } public int Qty { get; set; } public List<int> QtyList { get; set; } } public class Diff { public int Number1 { get; set; } public int Number2 { get; set; } public int Number3 { get; set; } public int Number4 { get; set; } public int Number5 { get; set; } public int Number6 { get; set; } public int Number7 { get; set; } public int Number8 { get; set; } public int Number9 { get; set; } public int Number10 { get; set; } public decimal DiffAmt { get; set; } } }
以上是脚本宝典为你收集整理的已知总数和几个商品总价,查找每个商品各取几个可以最接近或等于总价,实现程序全部内容,希望文章能够帮你解决已知总数和几个商品总价,查找每个商品各取几个可以最接近或等于总价,实现程序所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。