gpt4 book ai didi

c# - 以线性/均匀方式在列表 2 中分配列表 1 的不等长值

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:57:34 25 4
gpt4 key购买 nike

我有 2 List<float> 不等长度。

分数成绩

根据配置,一个或另一个列表大于另一个。

有两种情况:

用例 1:60 个分数和 50 个等级 - 1 到 6 有 10 个等级 -

我必须在 50 个等级中平均分配 60 个分数。因此很多年级会有多个相关的连续分数(数据结构1:N关系)

用例 2:40 个分数和 50 个等级 - 1 到 6 有 10 个等级 -

我必须在 50 个等级中平均分配 40 个分数。因此必须均匀地删除 10 个成绩 (50 - 40) 以获得分数和成绩之间 1:1 关系的数据结构。

我可以使用哪些算法来用 C# 解决问题?

我在此处写下了运行已实现算法时我期望的结果数据。

用例 1 示例结果数据:

Scores  Grade
0 6
1 5,9
2 - 3 5,8
4 5,7
5 5,6
6 5,5
7 5,4
8 - 9 5,3
10 5,2
11 5,1
12 5
13 4,9
14 - 15 4,8
16 4,7
17 4,6
18 4,5
19 4,4
20 - 21 4,3
22 4,2
23 4,1
24 4
25 3,9
26 - 27 3,8
28 3,7
29 3,6
30 3,5
31 3,4
32 - 33 3,3
34 3,2
35 3,1
36 3
37 2,9
38 - 39 2,8
40 2,7
41 2,6
42 2,5
43 2,4
44 - 45 2,3
46 2,2
47 2,1
48 2
49 1,9
50 - 51 1,8
52 1,7
53 1,6
54 1,5
55 1,4
56 - 57 1,3
58 1,2
59 1,1
60 1

用例 2 示例结果数据:

Score   Grade
0 6
1 5,9
2 5,8
3 5,6
4 5,5
5 5,4
6 5,3
7 5,1
8 5
9 4,9
10 4,8
11 4,6
12 4,5
13 4,4
14 4,3
15 4,1
16 4
17 3,9
18 3,8
19 3,6
20 3,5
21 3,4
22 3,3
23 3,1
24 3
25 2,9
26 2,8
27 2,6
28 2,5
29 2,4
30 2,3
31 2,1
32 2
33 1,9
34 1,8
35 1,6
36 1,5
37 1,4
38 1,3
39 1,1
40 1

y = f(x) 的 C# 转换代码 ;-)

  int x, y, accum;
int scores = 33;
int grades = 51;
float[] gradesArray = new float[grades];
float[] scoresArray = new float[scores];

for (y = 0; y < grades; y++)
gradesArray[y] = 6.0f - y / 10.0f;

accum = scores / 2;
y = 0;
for (x = 0; x < scores; x++)
{
scoresArray[x] = gradesArray[y];
accum += grades;
while (accum >= scores)
{
y++;
accum -= scores;
}
}

最佳答案

假设 gradesArray 是由 y 索引的输入数组,scoresArray 是由 x 索引的输出数组.要生成输出数组,对于输出数组中的每个索引,您需要从输入数组中选择相应的值。在伪代码中:

scoresArray[x] = gradesArray[y]   where y = f(x)

换句话说,每个输出值scoresArray[x]取自输入数组gradesArray[y]中的位置y,其中yx 的一些函数。那是什么功能?好吧,这是一条线。

这是一些使用 line drawing algorithm 的示例代码解决用例 1:

int x, y, accum;
int scores = 61;
int grades = 51;
float[] gradesArray = new float[grades];
float[] scoresArray = new float[scores];

for (y = 0; y < grades; y++)
gradesArray[y] = 6.0f - y / 10.0f;

accum = (scores-1) / 2;
y = 0;
for (x = 0; x < scores; x++)
{
scoresArray[x] = gradesArray[y];
accum += (grades-1);
y += accum / (scores-1);
accum %= (scores-1);
}

要为用例 2 调整代码,只需将 int scores = 61 更改为 int scores = 41

关于c# - 以线性/均匀方式在列表 2 中分配列表 1 的不等长值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37769138/

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