C# 从一组n中找出K元素的所有变化

C# 从一组n中找出K元素的所有变化,c#,algorithm,variation,C#,Algorithm,Variation,我一直在试图从集合[1..N]中生成K元素的所有变体。我也有一个想法,我可以用k个嵌套循环来实现这一点,并尝试递归实现,但没有成功 我有这个功能: public static void PrintVariation(int n, int k, int[] array) { //when k = 2 for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) {

我一直在试图从集合[1..N]中生成K元素的所有变体。我也有一个想法,我可以用k个嵌套循环来实现这一点,并尝试递归实现,但没有成功


我有这个功能:

public static void PrintVariation(int n, int k, int[] array) 
{ 
   //when k = 2 

   for (int i = 0; i < n; i++) 
   { 
      for (int j = 0; j < n; j++) 
      { 
         Console.WriteLine("{0}, {1}", array[i], array[j]); 
      } 
   } 
} 
公共静态void PrintVariation(int n,int k,int[]数组)
{ 
//当k=2时
对于(int i=0;i

但是当
k
有一个随机值时,我应该怎么做呢?

这里是我的提示:我认为使用递归是正确的

private List<Element[]> getVariations(int k, Element[] elements)
{
    // ... ^_^
    // use getVariations with less elements in here
}
private List getVariations(int k,元素[]元素)
{
// ... ^_^
//在此处使用元素较少的getVariations
}

这里是我的提示:我认为使用递归是正确的

private List<Element[]> getVariations(int k, Element[] elements)
{
    // ... ^_^
    // use getVariations with less elements in here
}
private List getVariations(int k,元素[]元素)
{
// ... ^_^
//在此处使用元素较少的getVariations
}

我不确定我是否明白你的意思,但我认为你应该这样做:

  • 创建一个函数,该函数将“从集合[1..N]生成K个元素的变体”,它应该返回该变体
  • 在另一个方法的for循环中调用该函数,该方法会将该函数添加到泛型集合中。您可以添加另一个例程,该例程将检查函数生成的变体是否已存在于集合中,并跳过将该变体添加到集合中

  • 我不确定我是否明白你的意思,但我认为你应该这样做:

  • 创建一个函数,该函数将“从集合[1..N]生成K个元素的变体”,它应该返回该变体
  • 在另一个方法的for循环中调用该函数,该方法会将该函数添加到泛型集合中。您可以添加另一个例程,该例程将检查函数生成的变体是否已存在于集合中,并跳过将该变体添加到集合中
  • publicstaticlist-GetVariations(intk,列表元素)
    {
    列表结果=新列表();
    如果(k==1)
    {
    AddRange(elements.Select(element=>newlist(){element}));
    }
    其他的
    {
    foreach(元素中的T元素)
    {
    列出子元素=元素。其中(e=>!e.Equals(element)).ToList();
    列出子变量=获取变量(k-1,子元素);
    foreach(列出子变体中的子变体)
    {
    子变量。添加(元素);
    结果:添加(子变量);
    }
    }
    }
    返回结果;
    }
    
    公共静态列表GetVariations(int k,列表元素)
    {
    列表结果=新列表();
    如果(k==1)
    {
    AddRange(elements.Select(element=>newlist(){element}));
    }
    其他的
    {
    foreach(元素中的T元素)
    {
    列出子元素=元素。其中(e=>!e.Equals(element)).ToList();
    列出子变量=获取变量(k-1,子元素);
    foreach(列出子变体中的子变体)
    {
    子变量。添加(元素);
    结果:添加(子变量);
    }
    }
    }
    返回结果;
    }
    
    请发布您当前的代码,并解释您在使用代码时遇到的困难。请将您的代码放在上面,以便我们更好地理解问题。首先,让我们看看你到目前为止做了些什么。中的问题相同。你可以在这里阅读一些有趣的想法:请发布你当前的代码,并解释你在其中遇到的困难。你能把你的代码放出来,以便我们更好地理解这个问题吗,让我们看看你到目前为止都做了些什么。中也有同样的问题。你可以在这里读到一些有趣的想法:嗯,一个包含大量
    []
    的提示,而我们有这些方便的
    。这只是一个暗示^^嗯,一个包含大量
    []
    的提示,而我们有这些方便的
    就是这样。这只是一个暗示^^我有这个函数:publicstaticvoidprintvariation(intn,intk,int[]数组){//when k=2 for(inti=0;i