C#从int数组中获取n个数的组合的集合(给分100)
从int数组中获取n个不相邻并且不相等的数的组合的集合如:List<int> array = new List<int> { 1, ....,50 }从这个数组中取5(可变n)个数的集合
请高人给写个算法得出结果为一下形势
Dictionary<string, List<int>> dic = new Dictionary<string, List<int>>();
key:List<int>中元素用","分开
List<int>:n个数的集合 --------------------编程问答-------------------- 哦也 100分呀 帮顶。。。 --------------------编程问答-------------------- 这个好像应该不难,你只要从第一个数开始,然后找第三个,如果第三个不相等,则加入组合,如果相等则找第四个,依此类推 --------------------编程问答-------------------- 你这个int 数组有序么?有重复值么,如果无序又有重复的话我觉得比较复杂,因为涉及到是否相邻问题,顺序啊什么的都不好处理,要么就像楼上说的那样一点点比较,确保组合内任意两个值之间差值大于1,要么先排序再处理。 --------------------编程问答-------------------- 一个个的遍历比较啊。。。。并且 第一个下标i和第二个数下标j 差不等于1啊 --------------------编程问答-------------------- 用递归写穷举,很基本的算法,根据题目中的条件做一些剪枝,性能会更好。 --------------------编程问答-------------------- 学习中。。。。同求指导 --------------------编程问答-------------------- 似乎只能一个个的遍历 --------------------编程问答-------------------- 不知道对原始的int数组是不是有什么要求? --------------------编程问答-------------------- 无重复值,顺序无所谓,需要递归 --------------------编程问答-------------------- 假设这个数组是1,3,1,5,3
你想要的结果是什么呢? --------------------编程问答-------------------- 不知道楼主是不是这个意思
System.Collections.Generic.List<int> array = new System.Collections.Generic.List<int>();
Random r = new Random();
for (int i = 0; i < 50; i++)
array.Add(r.Next(100));
System.Collections.Generic.List<int> newarray = new System.Collections.Generic.List<int>();
int n = 0;//n来记录要获取的个数
for (int i = 0; i < array.Count - 1 && n < 10; i++)//获取十个数
{
if (Math.Abs(array[i] - array[i + 1]) > 1&&newarray.Where(a=>a==array[i]).Count()==0)
{
newarray.Add(array[i]);
n++;
}
}
补充:.NET技术 , C#