文章

17

粉丝

81

获赞

0

访问

790

头像
2010年计算机学科专业基础综合试题 - 第42题回答
数据结构
发布于2025年9月24日 09:27
阅读数 53

 

 

先将前p个数据放在一个新的p大小的数组中,再将p到n-1的数据往前移,最后将这怕个数据复制到原数组的后面

void leftShift(int R[], int n, int p) {
    int *temp = new int[p]; // 辅助数组,暂存前p个元素
    for (int i = 0; i < p; i++) {
        temp[i] = R[i];
    }
    // 后n-p个元素左移p位
    for (int i = p; i < n; i++) {
        R[i - p] = R[i];
    }
    // 将暂存的前p个元素放回原数组末尾
    for (int i = 0; i < p; i++) {
        R[n - p + i] = temp[i];
    }
    delete[] temp; // 释放辅助数组内存
}

O(n) O(p) 


评分及理由

(1)得分及理由(满分4分)

得分:4分

理由:学生的作答明确描述了借助辅助数组实现循环左移的基本设计思想,思路正确且与标准答案中的"另解"一致。具体步骤包括:将前p个元素暂存到辅助数组,将后n-p个元素左移,最后将辅助数组中的元素放回原数组末尾。该思路清晰完整,符合题目要求。

(2)得分及理由(满分7分)

得分:7分

理由:学生用C++语言正确实现了所述算法。代码逻辑清晰,包含三个关键步骤:创建辅助数组并暂存前p个元素、将后n-p个元素左移p位、将辅助数组元素复制回原数组末尾。代码注释适当(通过代码结构体现了算法步骤),内存管理正确(使用new/delete)。与标准答案的另解完全一致,没有逻辑错误。

(3)得分及理由(满分2分)

得分:2分

理由:学生正确说明了算法的时间复杂度为O(n)和空间复杂度为O(p),这与标准答案的分析完全一致。分析准确完整。

题目总分:4+7+2=13分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发