2015-10-06 70 views
-8

我有一個包含10個項目的列表。我試圖輸出控制每個可能的配對2.但它不能與自身配對。例如 1,2 1,3 1,4等...從列表中收集2的所有可能組合

我發現這個查找列表中的所有可能的組合。有人可以幫我修改嗎?

private static void GetCombination(IList list) 
    { 
     var count = Math.Pow(2, list.Count); 
     for (var i = 1; i <= count - 1; i++) 
     { 
      var str = Convert.ToString(i, 2).PadLeft(list.Count, '0'); 
      for (var j = 0; j < str.Length; j++) 
      { 
       if (str[j] == '1') 
       { 
        Console.Write(list[j]); 
       } 
      } 
      Console.WriteLine(); 
     } 
    } 
+0

使用谷歌的樣子是多麼容易找到解決辦法來吧.. [C#冒泡排序(http://www.c-sharpcorner.com/UploadFile/3d39b4/bubble-sort-in- C-Sharp /) – MethodMan

+0

我從來沒有說過我不知道我發佈的代碼是幹什麼的。發佈的代碼是從列表對象中獲取所有組合。我試圖得到所有組合配對的X數量,即配對2,所以輸出將是.... 1,2 1,3,1,10 – Andy

+0

您的代碼最初會給'var count = Math.Pow (2,list.Count);'計數值爲'1024.0',與無需重複值應該完成的任何操作無關。'FirstOne'給了你一個起點,需要添加1或2個希望你可以快速找出需要添加什麼 – MethodMan

回答

1

所以,如果你有1到10的列表,你需要1,21,31,4 ... 1,10 - 2,12,3 ... 2,10等。 你只需使用氣泡並檢查第一個索引是否與第二個索引不同。

更多的澄清,這裏有一個例子:

List<int> mylist = new List<int>(new int[] { 1,2,3,4,5,6,7,8,9 }); 
GetCombination(mylist); 


private static void GetCombination(IList<int> values) 
{ 
    for (int i = 0; i < values.Count; i++) 
    { 
     for (int j = 0; j < values.Count; j++) 
     { 
      if (i != j) 
      { 
       Console.WriteLine(values[i] + " " + values[j]); 
      } 
     } 
    } 
} 
+0

這是正確的 – Andy

+1

@Andy如果你覺得你被困在某些東西,嘗試將問題分成幾步,甚至一步一步。你可以調試,如果你願意的話。另一個技巧是弄清楚你必須做什麼,而不管程序設計語言,只有代碼。無論如何。如果這是您正在尋找的答案,請不要忘記接受它並投票。 – FirstOne

0

這是這樣一個簡單的question.Adding到@FirstOne 的回答,您還可以返回一個包含從該函數的所有組合的清單: List mylist = new List(new int [] {1,2,3,4,5,6,7,8,9}); GetCombination(mylist);

public static IList<Tuple<int,int>> GetCombination(IList<int> values) 
    { 
     List<Tuple<int,int>> _temp=new List<Tuple<int, int>>(); 
     for (int i = 0; i < values.Count; i++) 
     { 
      for (int j = 0; j < values.Count; j++) 
      { 
       if (i != j) 
       { 
        _temp.Add(Tuple.Create(i, j)); 
       } 
      } 
     } 
     return _temp; 
    }