You need to enable JavaScript to run this app. AP CSA考试真题:如何确定该程序段的最佳后置条件?
优惠活动
大模型
产品
解决方案
定价
更多

AP CSA考试真题:如何确定该程序段的最佳后置条件?

AP CSA考题后置条件逻辑验证

原题重现

程序段

/** Precondition: a[0]...a[n-1] is an initialized array of integers, and 0 < n <= a.length. **/
int c = 0;
for (int i = 0; i < n; i++)
  if (a[i] >= 0)
  {
    a[c] = a[i];
    c++;
  }
n = c;

题干与选项

问该程序段的最佳后置条件是哪一项?

  • 选项1:a[0]到a[n-1]移除了所有正整数
  • 选项2:a[0]到a[n-1]移除了所有负整数
  • 选项3:a[0]到a[n-1]移除了所有非负整数
  • 选项4:a[0]到a[n-1]移除了所有零
  • 选项5:程序执行后更新的n值小于等于执行前的n值

疑问解答

你提到的「初始数组所有元素都是负数时,选项2表述是否成立」的问题,答案是完全成立,原因如下:

  • 编程场景下「移除集合中所有X类型元素」的标准定义是:操作完成后,目标集合内不存在任何X类型元素,并不要求操作过程中必须有至少一个X元素被删除。
  • 对应全负数组的场景:程序执行完后c的值为0,n被赋值为0,此时a[0]到a[n-1]是没有元素的空区间,空区间天然不存在负整数,完全符合「移除所有负整数」的描述。
  • 可以用现实场景类比:你说「我把包里所有的硬币都拿出来了」,如果包里本来就没有硬币,这句话也不算错,二者逻辑完全一致。

另外官方标注选项2为最佳答案的逻辑也成立:后置条件核心是描述程序的核心功能,选项5只是程序实现带来的附属属性,完全没有描述数组内容的变更逻辑,自然不属于最佳选项。


内容的提问来源于stack exchange,提问作者Michael Mo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 10:06:04