首页 > 解决方案 > 用于构建所有子集的函数

问题描述

我想创建一个创建所有子集列表的函数。例如 :

if list candid in step 1 is: {1,2,4,5}
output: {12,14,15,24,25,45}

and if list candid in step 2 is: {12,14,25,45} (15,24 deleted)
output: {124,125,145}

我在下面编写了代码,但此代码仅适用于构建坦率的第 2 步。

            for (int i = 0; i < candid.Count; i++)
            {
                for (int j = i + 1; j < candid.Count; j++)
                {
                    if(ratecandid[i] > 50)
                    {
                        candid_new.Add(int.Parse(string.Concat(candid[i], candid[j])));
                    }
                }
            }

我不认为这是一个好的代码。您能否提供适用于其他列表的适当解决方案?

更新:

一般来说,我们有一组数字。(1,2,4,5),在这个集合的另一个函数中定义了一个比率(100,101,94,172)(94代表4)。如果每个数字的比率小于50,则不选择这个数字。所以首先,选择所有成员,我们必须创建所有可能的子集。{12,14,15,24,25,45}。同样,对于这些成员,比率是确定的,(60,74,42,36,74,63,)。如果每个数字的比率(比率 12 为 60)小于 50,则不选择该数字。所以这个集合被选中{12,14,25,45},现在,我们必须创建所有可能的子集。{124,125,145}。

该集合必须按顺序排列(如:字母顺序),并且不应存在重复成员。121 和 122 有经常性会员

标签: c#

解决方案


由于您对速率的计算仍然未知,因此这里是一个部分的回答,它将为您提供所有可能的结果:

var result = new List<int> { };
for (int i = 0; i < candid.Count(); i++)
{
    for (int j = i + 1; j < candid.Count(); j++)
    {
        var value =
            int.Parse(
                new string(
                    string.Concat(candid[i], candid[j])
                        .OrderBy(x => x)
                        .Distinct()
                        .ToArray()
                    )
                );

        if (true)
        {
            result.Add(value);
        }
    }
}
return result.Distinct().ToArray();

新的部分基本上是:

- 一旦 int 被连接。
- 删除其中的重复数字。
-命令他们。

- 如果它满足您的条件,则将其添加到结果中。

- 在返回结果之前确保它没有重复。瞧。


推荐阅读