节目]
GLOBAL: INT: N = 8, S = 14
GLOBAL: INT: A[N] ={6, 3, 2, 5, 1, 1, 7, 3}
SUBPROGRAM:
SSum2point() {
INT: sum = A[ 1 ], start = 1, end, found = 0
FOR (end = 1; end ≤ N; end = end + 1) {
WHILE (S < sum and start < end) {
sum = sum – A[start]; /* β */
start = start + 1;
}
IF (S = sum) {
print(start + ", " + end);
found = 1;
}
IF (end < N) {
sum = sum + A[end + 1];
}
}
IF (found = 0) {
print("No subarray found");
}
}
我已经跟踪了这段代码,但是我得到了 /* β */ 行被执行了 3 次。我哪里错过了? 但真正的答案是执行4次。有人可以向我解释一下吗?请!
这是 JavaScript 脚本。
它符合你的预期吗?
const SSum2point = () => {
const N = 8, S = 14;
const A = [6, 3, 2, 5, 1, 1, 7, 3];
let sum = A[0],
start = 0, end, found = false;
for (end = 0; end < N; end++) { // JS and Java loops are 0 based
while (S < sum && start < end) {
sum -= A[start]; // Equivalent to /* β */
start++;
console.log(start);
}
if (S === sum) {
console.log(`Start: ${start + 1}, End: ${end + 1}`);
found = true;
}
if (end < N - 1) {
sum += A[end + 1];
}
}
if (!found) {
console.log("No subarray found");
}
}
SSum2point();