添加列表c#元素的所有可能组合

时间:2018-05-06 09:00:40

标签: c# list

namespace CombinationWork
{
    class Program
    {
        static void Main(string[] args)
        {
            List<int> List = new List<int>(new int[] {1,2,5,10});
            for (int noSelected=0;noSelected<4;noSelected++)
            {
                for(int noAdded=0;noAdded<4;noAdded++)
                {
                    List.Add(List[noSelected]+List[noAdded]);
                }
            }
            List = List.Distinct().ToList();
            for (int display = 0; display < List.Count; display++)
            {
                Console.WriteLine( List[display]);
            }
            Console.ReadLine();
        }
    }
}

需要帮助的人。 假设我有一个数组: int [] a = {1,2,5,10}; 我想互相添加所有元素。例如:

  • 1
  • 2

  • 2 + 1 = 3

  • 5 + 1 = 6
  • 5 + 2 = 7
  • 5 + 2 + 1 = 8
  • 10
  • 10 + 1 = 11
  • 10 + 2 = 12
  • 10 + 2 + 1 = 13
  • 10 + 5 = 15
  • 10 + 5 + 1 = 16
  • 10 + 5 + 2 = 17
  • 10 + 5 + 2 + 1 = 18

我得到了一些不准确的值。错误在于使用嵌套的for循环,但我不知道还有什么可以使用

1 个答案:

答案 0 :(得分:0)

对于n个数字,它应该给你2个pow n组合。使用数字的二进制表示来发布所有组合。

实施例,     二进制 - 001十进制 - 1     二进制 - 010十进制 - 2     二进制 - 011十进制 - 3     ...     二进制 - 001十进制 - 1

从上面的真值表中,只有当各个二进制数字为1时才包含一个求和的数字

示例,列表中的数字[1,2,3];解释如下,     对于二进制 - 001,你应该得到3     对于二进制 - 010,你应该得到2     对于二进制 - 011,你应该得到2 + 3 = 6