C# 多个数组 组合 找出最接近
varcard1=newDictionary(){{"a1-1",10},{"a1-2",10},{"a1-3",10},{"a1-4",10},{"a1-5",10},...
var card1 = new Dictionary
() { { "a1-1", 10 }, { "a1-2", 10 }, { "a1-3", 10 }, { "a1-4", 10 }, { "a1-5", 10 }, { "a1-6", 10 }, };var card2 = new Dictionary() { { "b1-1", 20 }, { "b1-2", 20 }, { "b1-3", 20 }, { "b1-4", 20 }, { "b1-5", 20 }, { "b1-6", 20 }, };var card3 = new Dictionary() { { "c1-1", 50 }, { "c1-2", 50 }, { "c1-3", 50 }, { "c1-4", 50 }, { "c1-5", 50 }, { "c1-6", 50 }, };var card4 = new Dictionary() { { "d1-1", 80 }, { "d1-2", 80 }, { "d1-3", 80 }, { "d1-4", 80 }, { "d1-5", 80 }, { "d1-6", 80 }, };var card5 = new Dictionary() { { "e1-1", 100 }, { "e1-2", 100 }, { "e1-3", 100 }, { "e1-4", 100 }, { "e1-5", 100 }, { "e1-6", 100 }, };var card6 = new Dictionary() { { "f1-1", 200 }, { "f1-2", 200 }, { "f1-3", 200 }, { "f1-4", 200 }, { "f1-5", 200 }, { "f1-6", 200 }, };
给定 150,应该是card5 提取一个值 card3提取一个值 这样组合得150; 返回 e1-? and c1-1
给定 200,应该是card6 提取一个值 得200;f1-1
要返回返回对应的 KEY
求算法~~
取最少组合,比如像取 200,直接在200数组取一个,而不是在 100 数组里取两个! 展开
() { { "a1-1", 10 }, { "a1-2", 10 }, { "a1-3", 10 }, { "a1-4", 10 }, { "a1-5", 10 }, { "a1-6", 10 }, };var card2 = new Dictionary() { { "b1-1", 20 }, { "b1-2", 20 }, { "b1-3", 20 }, { "b1-4", 20 }, { "b1-5", 20 }, { "b1-6", 20 }, };var card3 = new Dictionary() { { "c1-1", 50 }, { "c1-2", 50 }, { "c1-3", 50 }, { "c1-4", 50 }, { "c1-5", 50 }, { "c1-6", 50 }, };var card4 = new Dictionary() { { "d1-1", 80 }, { "d1-2", 80 }, { "d1-3", 80 }, { "d1-4", 80 }, { "d1-5", 80 }, { "d1-6", 80 }, };var card5 = new Dictionary() { { "e1-1", 100 }, { "e1-2", 100 }, { "e1-3", 100 }, { "e1-4", 100 }, { "e1-5", 100 }, { "e1-6", 100 }, };var card6 = new Dictionary() { { "f1-1", 200 }, { "f1-2", 200 }, { "f1-3", 200 }, { "f1-4", 200 }, { "f1-5", 200 }, { "f1-6", 200 }, };
给定 150,应该是card5 提取一个值 card3提取一个值 这样组合得150; 返回 e1-? and c1-1
给定 200,应该是card6 提取一个值 得200;f1-1
要返回返回对应的 KEY
求算法~~
取最少组合,比如像取 200,直接在200数组取一个,而不是在 100 数组里取两个! 展开
展开全部
可以使用贪心法 对所有可能取的值进行排序 然后遍历一次最大可能取出即可
考虑如下代码:
var card1= .....
var all = new[]{card1,card2,card3,card4,card5,card6}
.SelectMany(dict=>dict)
.OrderBy(kv=>kv.Value).ToList();
var p = 150;
for(int i=all.Count-1;i>=0;i--) {
if (p >= all[i].Value) {
p -= all[i].Value;
Console.WriteLine(all[i].Key+" "+all[i].Value);
all.RemoveAt(i);
if (p==0) break;
}
}
当p=150时 返回
e1-6 100
c1-6 50
P=200时 返回
f1-6 200
展开全部
如果给定150,其实是可以取100+50,或者100+20+20+10,或者100+20+10+10+10,或者其他,给定的值不同相应的组合也不同,楼主是想取到所有可能的组合并返回相应的索引吗?
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
循环遍历数组 获取value 与你要匹配的值相差最少的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
写那么大一堆数据干嘛,还是没说清楚数据的结构。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询