测验:计算天数组合

时间:2016-07-30 07:16:36

标签: javascript c# jquery excel

我想计算一下我可以拥有的天数等于我的设定值。

例如,如果某人有30天的年假作为就业的一部分,我想计算他们可以采取哪些不同的假期。

一个例子是:

  

5,10,5,2,2,1,5

如您所见,上述将等于30。

计算的想法是让潜在的员工知道他们可以采取什么样的休假。

返回的值也可以是:

  

10,10,10

这意味着我需要计算等于年假总数的数字组合。

挑战可以在任何编程语言中完成!

我尝试了以下内容:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            // find all possible combinations of this list
            var input = new[] { "1", "2", "3", "4", "5", "6","7","8","9","10","11","12","13","14" };
            var output = FastPowerSet(input);

            Print(output);
            Console.ReadLine();
        }

        static T[][] FastPowerSet<T>(T[] seq)
        {
            var powerSet = new T[1 << seq.Length][];
            powerSet[0] = new T[0]; // starting only with empty set
            for (var i = 0; i < seq.Length; i++)
            {
                var cur = seq[i];
                var count = 1 << i; // doubling list each time
                for (var j = 0; j < count; j++)
                {
                    var source = powerSet[j];
                    var destination = powerSet[count + j] = new T[source.Length + 1];
                    for (var q = 0; q < source.Length; q++)
                        destination[q] = source[q];
                    destination[source.Length] = cur;
                }
            }
            return powerSet;
        }

        static void Print<T>(T[][] seq)
        {
            for (var i = 0; i < seq.Length; i++)
            {
                var line = new StringBuilder();
                for (var j = 0; j < seq[i].Length; j++)
                {
                    line.AppendFormat("{0}, ", seq[i][j]);
                }
                Console.WriteLine(line);
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

谢谢PriceCheaperton!

已经回答了一个更广泛的问题 here where restrictions of the sizes of the parts of the given sum can be given as well.

在上面链接顶部的Python解决方案中,您将修改对此函数的调用以解决您的特定示例(我不知道15..30是否有效,否则您需要完成以与我开始的方式相同的方式列出:

subset_sum([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15..30],30)

最诚挚的问候, 垫