在数组中优先选择高索引号而不是低索引号

Dor*_*rki 0 c# arrays algorithm integer

假设我有两个带有5个单元格的排序数组:

数组中的数字在2到14之间(包括2到14,它们是整数)

现在,当最低的数组为:[0,100]时,我需要给每个数组一个等级:

[2,2,2,2,2],最高为[14,14,14,14,14]

现在的事情是:索引很重要,因此例如,如果我们看一下这些数组:

1)[2,2,2,2,10]

2)[8,8,8,8,9]

因此,第一个比第二个更好,并且得分会更高。

并且如果索引中有一个领带(从右到左),例如:

1)[3,4,5,10,13]

2)[3,4,7,10,13]

因此索引编号:3和4相同,但是由于7高于5。因此,在这种情况下,第二个数组的得分更高。

我在数学上苦苦挣扎,我想提高效率,现在我可以做类似的事情:

2 ^ array [i]但效率不高,所以我设法做的主要事情是

double rank = 0;
for (int i = 0; i < 5; i++)
{
    rank += (double)array[i] / 14 + i;
}
Run Code Online (Sandbox Code Playgroud)

因为如果array [i]可以在2到14之间,那么1/7 <= array [i] / 14 <= 1,所以我认为如果每次迭代都添加+ i,那么下一个迭代将大于所有以前的那些,但这是错误的。

我很乐意在这里提供一些帮助。

Eri*_* J. 5

您实际上是在描述以13为底的数字。每个“数字”(数组位置)代表13个不同的有序值之一。

您可以通过将数组转换为5位以13为底的值来计算排名:

  • 从每个数组元素的值中减去2,以将元素值归一化为范围0..12。
  • 给每个数组元素一个分数=(归一化元素值)*(将13提升为数组索引的幂)。1)
  • 加总分数。

1)或提高到Array.Length-数组索引,具体取决于数组的哪一侧应是最低有效的。