【发布时间】:2018-06-30 08:26:25
【问题描述】:
我想编写一个程序,将整数数组中的所有数字相加 - 有一个例外!由于数字 6 不是最好的,我建议我们排除所有以 6 开头并以 7 结尾的数字部分 - 包括在内。 每 6 后面总是跟着一个 7,但不一定反之亦然。
以下是输入数组及其预期输出的几个示例:
sum67([1, 2, 2, 6, 99, 99, 7]) = 5 6 到 7 之间的所有数字都被排除在外。
sum67([1, 2, 2]) = 5 这里没有 6 或 7。
sum67([1, 1, 6, 7, 2]) → 4 6 和 7 都不包括在内。
以上所有测试都通过了。
再一次,方法头是固定的,我可能只改变方法的主体。这是我对代码的尝试:
public int sum67(int[] nums) {
int sum = 0;
for (int i = 0; i < nums.length; i++) {
// Adding all numbers that are not a 6
if (nums[i] != 6) sum += nums[i];
}
for (int j = 0; j < nums.length; j++) {
// check for the sixes - the lower bound exclusive
if (nums[j] == 6) {
for (int k = j + 1; k < nums.length; k++) {
// check for the sevens - the upper bound inclusive
if (nums[k] == 7) {
// take away all the numbers between the 2 bounds, including the 7
for (int m = j + 1; m <= k; m++) {
sum -= nums[m];
}
}
}
}
}
return sum;
}
上面的程序不仅不起作用,而且显然非常混乱。特别是,它未通过以下测试:
sum67([1, 6, 2, 6, 2, 7, 1, 6, 99, 99, 7]) = 2实际输出为-463!
sum67([2, 2, 6, 7, 7]) = 11 实际输出为-3。
所以本质上:
我的代码中的错误行在哪里?
有没有更好的方法来编写这个没有那么多循环和嵌套ifs 的程序?
【问题讨论】:
-
应该
[6, 6, 7, 7]输出0还是7? -
@Sweeper 它应该输出 7。第二个 6 包含在第一个 6-7 通道中。