调用子程序SSum2point时,会执行/* β */行?

问题描述 投票:0回答:1

节目]

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次。有人可以向我解释一下吗?请!

language-agnostic pseudocode
1个回答
0
投票

这是 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();

© www.soinside.com 2019 - 2024. All rights reserved.