.错误有以下几处
()过程参数没有类型说明 ()出错条件判断缺少OR(i+k>last+)
()删除元素时FOR循环应正向不应用反向DOWNTO ()count没定义
低效体现在两处
()删除k个元素时不必一个一个元素前移而应一次前移k个位置
()last指针不应一次减而应最后一次减k
正确的高效算法如下
const m=
TYPE ARR=ARRAY[m] OF integer
PROCEDURE delk(VAR A:ARRVAR last:integer;ikinteger)
{从数组A[last]中删除第i个元素起的k个元素m为A的上限}
VAR countinteger
BEGIN
IF(i<)OR(i>last)OR(k<)OR(last>m)OR(i+k>last+)
THEN write(error)
ELSE[FOR count= i+k TO last DO A[countk]=A[count]
last=lastk]
END
[] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] []