gpt4 book ai didi

c# - 根据起始值和最终值以及值持有者的数量分配值

转载 作者:太空狗 更新时间:2023-10-30 00:48:49 25 4
gpt4 key购买 nike

我正在尝试根据起始值和结束值将值分配给特定数量的值持有者。

如果 Value Holders 的数量等于 Start Values 和 End Values 的差值,这将只是一个简单的迭代:

Start Value  : 1
End Value : 10
Value Holders: 10
|
Expected Result: 1 2 3 4 5 6 7 8 9 10

如果 Value Holders 的数量小于 Start Values 和 End Values 的差值,我们需要跳过一些数字。目标是尝试尽可能均匀地分配值。

注意:向右/向左倾斜并不重要:)

Start Value  : 1
End Value : 10
Value Holders: 5
|
Expected Result: 1 3 5 8 10
or
1 3 6 8 10

Start Value : 1
End Value : 10
Value Holders: 3
|
Expected Result: 1 5 10
or
1 6 10

如果值(value)持有者的数量大于起始值和最终值的差值,我们将重复一些数字。

Start Value  : 1
End Value : 10
Value Holders: 15
|
Expected Result: 1 2 3 4 4 5 5 6 6 7 7 8 8 9 10
(or something similar)

我如何在 C# 中实现它?

最佳答案

这只是 arithmetic progression 的另一种形式声明了 a1(起始值)、N(值持有者的数量)和 aN(结束值)。

由等差级数公式:
enter image description here

我们可以提取 d 因为我们知道所有其他值。

d = (aN - a1) / (N - 1)

当您知道所有值时,您可以简单地生成整个等差级数序列:

public int[] GetValues(int a, int b, int count)
{
double d = (b - a) / (double)(count - 1);

return Enumerable.Range(0, count)
.Select(i => (int)Math.Round(a + d * i))
.ToArray();
}

// Usage:
int[] r1 = GetValues(1, 10, 10); // 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
int[] r2 = GetValues(1, 10, 5); // 1, 3, 6, 8, 10
int[] r3 = GetValues(1, 10, 15); // 1, 2, 2, 3, 4, 4, 5, 6, 6, 7, 7, 8, 9, 9, 10

您可以删除 (int)Math.Round() 以将中间结果视为 double。

关于c# - 根据起始值和最终值以及值持有者的数量分配值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43245384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com