gpt4 book ai didi

java - AP 计算机科学 ArrayList

转载 作者:行者123 更新时间:2023-12-01 17:17:19 27 4
gpt4 key购买 nike

问题是:

给定一个由未知大小的整数和其他三个 int 值组成的 ArrayList,删除 ArrayList 中位于 int 值指定的索引位置的三个元素。将 ArrayList 的第一个元素设置为三个删除值的平均值(四舍五入到最接近的整数),并返回 ArrayList。

前提条件:ArrayList 至少有四个元素,其他 int 值将按降序排列,以防止混淆它们代表的索引。

apcsaListAverageRemovals([3, 6, 8, 10], 3, 2, 1) → [8]
apcsaListAverageRemovals([-177, 383, 476, -15, 62, 19, -247], 3, 2, 1) → [281, 62, 19, -247]
apcsaListAverageRemovals([258, 99, 225, 430, -497, 124], 4, 3, 3) → [19, 99, 225]

这是我尝试的解决方案

public ArrayList<Integer> apcsaListAverageRemovals(ArrayList<Integer> lst, int a, int b, int c) {
int suma = lst.get(a);
lst.remove(a);
int sumb = lst.get(b);
lst.remove(b);
int sumc = lst.get(c);
lst.remove(c);
int avg = (suma + sumb +sumc)/3;
lst.set(0, avg);
return lst;
}

对于大多数情况,我的解决方案有效,但对于少数情况,它返回的第一个元素比该情况的预期值小 1。

下面是一个示例:apcsaListAverageRemovals([33, -481, 245, 359, 166], 3, 2, 2) → 预期:[257, -481] 返回:[256, -481]

最佳答案

计算 3 个值的平均值的行不会舍入,而是截断(始终向下舍入)。要解决此问题,请将行更改为:

int avg = (suma + sumb +sumc)/3 + 0.5;

将平均值计算为 double,然后添加额外的 0.5,这样当 double 转换为 int 时发生的截断也是正确的舍入。如果您不明白为什么,我将使用 | 提供一些示例。表示截断(意味着 1.5 将被写为 1|.5,因为它被截断为 1)。

2.3 should round to 2 -> 2.3 + 0.5 = 2|.8 
2.7 should round to 3 -> 2.7 + 0.5 = 3|.2
3.5 should round to 4 -> 3.5 + 0.5 = 3|.0
3.4999 should round to 3 -> 3.499 + 0.5 = 3|.999

就您的问题中包含的示例而言:

The average of 359, 245, and 166 should round to 257.
(359 + 245 + 166)/3.0 = 256.66666667
256.66666667 + 0.5 = 257|.16666667

希望这有帮助!

关于java - AP 计算机科学 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61358906/

27 4 0