我想计算一下我可以拥有的天数等于我的设定值。
例如,如果某人有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);
}
}
}
}
答案 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)
最诚挚的问候, 垫