我想创建一个创建所有子集列表的函数。例如:
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},现在,我们必须创建所有可能的子集。 {} 124125145。
该集合必须按顺序排列(如:字母顺序),并且不应存在定期成员。 121和122有经常性成员
答案 0 :(得分:0)
由于您的费率计算仍然未知,因此这是一个可以获得所有可能结果的部分工具:
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是连接的。
- 删除其中的重复数字
- 命令他们。
- 如果它满足您的条件,则将其添加到结果中。
- 在返回结果之前确保它没有重复。瞧。
答案 1 :(得分:0)
这里我向您展示了一个接受数字列表并使用该列表的方法,它将提供新的列表。
新列表将负责
你只需要检查你的费率的逻辑部分,以便那些费率低于50的数字
private static List<int> GetNewList(List<int> numberList)
{
List<int> newNumList = new List<int>();
for (int i = 0; i < numberList.Count - 1; i ++)
{
for(int j = i+1; j < numberList.Count; j++)
{
string number = "";
foreach (char ch in numberList[j].ToString())
{
number = numberList[i].ToString() + ch;
if (!IsNumRecurring(number))
{
number = String.Concat(number.OrderBy(c => c));
int num = int.Parse(number);
if (!newNumList.Contains(num))
newNumList.Add(num);
}
}
}
}
//Now we should check the same thing in reverse order on list.
for (int i = numberList.Count - 1; i > 0; i--)
{
for (int j = i -1; j >= 0; j--)
{
string number = "";
foreach (char ch in numberList[j].ToString())
{
number = numberList[i].ToString() + ch;
if (!IsNumRecurring(number))
{
number = String.Concat(number.OrderBy(c => c));
int num = int.Parse(number);
if (!newNumList.Contains(num))
newNumList.Add(num);
}
}
}
}
return newNumList;
}
//here we will check if number is recurring
private static bool IsNumRecurring(string num)
{
return num.Any(c => num.Where(ch => ch == c).Count() > 1);
}