【发布时间】:2012-07-13 10:54:40
【问题描述】:
我正在尝试创建一种方法来将数组平均分配到 X 个新数组中,其中仅允许 15 个项目 pr 数组,并且您只能创建一个新数组,如果前一个有 10 个项目, 除非数组少于 10 项。
编辑
为了让未来的读者更容易理解我的问题。
- 这就像一块布。
- 您需要构建 X 个产品。
- 为员工打造一款产品需要 T 量。
你需要多少员工,你如何分担他们之间的工作量?
结束编辑
Max allowed number in array = 15;
Min allowed number in array = 10;
Number = Numbers of Items in the Collection.
Number 5 => [5]
Number 13 => [13]
Number 16 => [10] [6]
Number 29 => [15] [14]
Number 30 => [15] [15]
Number 31 => [11] [10] [10]
Number 32 => [12] [10] [10]
Number 33 => [11] [11] [11]
我正在尝试用 C# 解决这个问题。
到目前为止,这是我的代码,但在 16 = [16]、29 = [19][10]、38 = [18][10][10] 等数字处失败
const int maxAllowedOrderLines = 15;
const int minAllowedOrderLines = 10;
var optimalOrderDisp = new List<int>();
Console.WriteLine("Number of OrderLines");
int linjer = Convert.ToInt32(Console.ReadLine());
if (linjer <= maxAllowedOrderLines)
optimalOrderDisp.Add(linjer);
else
{
for (var i = maxAllowedOrderLines; i > 0; i--)
{
var maxOrderLines = linjer%i;
if (maxOrderLines == 0 || i <= minAllowedOrderLines || linjer < maxAllowedOrderLines)
{
Console.WriteLine("Optimal number of order lines {0}--{1}", i, (double) linjer/(double) i);
var optimalNumberOfOrders = linjer/i;
for (var orderNumber = 0; orderNumber < optimalNumberOfOrders; orderNumber++)
{
optimalOrderDisp.Add(i);
}
if (maxOrderLines != 0)
optimalOrderDisp[0] += maxOrderLines;
break;
}
}
}
foreach (var i1 in optimalOrderDisp)
{
Console.Write("[{0}]", i1);
}
Console.WriteLine();
【问题讨论】:
-
你想让我们做什么?怎么会失败?看起来像家庭作业:)
-
为什么不是 31 -
Number 31 => [15][10][6]? -
#Adam Houldsworth Nope :-) 我上学已经好几年了。
-
啊 - 因为它总是会尝试符合最小/最大约束...
-
#El Ronnoco 我添加了失败的输出,希望对您有所帮助。关于 31 号,您的建议分布不均。前任。 Max = 30,您的排序将是 [30][1]
标签: c# .net algorithm language-agnostic