文章
172
粉丝
0
获赞
0
访问
26.1k
1)由题可知,可以通过逆置思想,先把序号0~(P-1)的逆置,再把P~(n-1)的逆置,最后再把整个数组逆置。逆置可以通过定义函数Reverse()实现。
2)
void Reveres(int R[], int beg, int end){
int temp;
int mid = (end-beg+1)/2;
for(int i; i < mid; ++i){
temp = R[beg+i];
R[beg+i]=R[end-i];
R[end-i]=temp;
}
}
void reverseP(int R[], int n,int p){
Reverse(R,0, p-1);
Reverse(R,p, n-1);
Reverse(R,0, n-1);
}
3)时间复杂度:O(n), 空间复杂度:O(1)
评分及理由
(1)得分及理由(满分4分)
得分:4分
理由:学生准确描述了算法的基本设计思想,即通过三次逆置操作实现循环左移,与标准答案完全一致。
(2)得分及理由(满分7分)
得分:5分
理由:
1. 函数名拼写错误:Reverse函数在声明时写成了"Reveres",但在调用时写成了"Reverse",这会导致编译错误(-1分)
2. 循环变量i未初始化:在Reverse函数的for循环中,变量i未初始化就直接使用,这会导致未定义行为(-1分)
3. 算法逻辑正确:除了上述两个错误外,算法的核心逻辑与标准答案一致,逆置操作和三次调用的顺序都正确
(3)得分及理由(满分2分)
得分:2分
理由:学生正确分析了算法的时间复杂度O(n)和空间复杂度O(1),与标准答案一致。
题目总分:4+5+2=11分
登录后发布评论
暂无评论,来抢沙发