【发布时间】:2018-05-15 18:55:40
【问题描述】:
我正在做作业(首先对不起英语)。
考虑 N 个硬币排成一排。每个硬币都显示正面或反面。这些硬币的邻接度是显示同一面的相邻硬币对的数量。返回通过反转一枚硬币可以获得的最大可能邻接度,其中一个硬币必须反转
例如我有
1 1 0 1 0 0
在更改 third 后,我们得到 1 1 1 1 0 0,所以我们有 4 对。
但是我的代码例如不起作用
1 1
我应该得到0,但得到1
public static void main(String[] args) {
int[] A = {1, 1};
int n = A.length;
int result = 0;
for (int i = 0; i < n - 1; i++) {
if (A[i] == A[i + 1])
result = result + 1;
}
int r = 0;
for (int i = 0; i < n; i++) {
int count = 0;
if (i > 0) {
if (A[i - 1] != A[i])
count = count + 1;
else
count = count - 1;
}
if (i < n - 1) {
if (A[i + 1] != A[i])
count = count + 1;
else
count = count - 1;
}
r = Math.max(r, count);
}
System.out.println(result + r);
}
我在哪里做错了?
【问题讨论】:
-
你必须换一枚硬币吗?结果是什么,r 是什么?在您的代码中,您永远不会更改代码,并且 11 是一对所以返回 1 是可以的
-
为什么 11 给出 0?有 10 个,你就有一个 1 连续。
-
azro 是的,这是强制性的,结果是对数。 juvian 因为 1 1 在反转一个之后你得到 1 0 这不是一对(对是 0, 0 或 1, 1)
-
但你的代码永远不会改变硬币
-
如果这是唯一错误的情况,当你的结果为 1 时返回 0,因为永远不可能有一对 1