文章

4

粉丝

0

获赞

0

访问

481

头像
【250518年】408计算机统考真题模拟考试 - 第41题答案笔记
数据结构
发布于2025年5月23日 20:04
阅读数 104

计算机考研408统考历年真题及答案解析

1.从头遍历一遍数组,用比较两个元素并用一个整数纪录每个元素出现的个数,若两个数不同且记录的数不是2,就找到了出现一次的元素

2.

int find(int a[]){
   int cnt = 1;//记录每个元素出现的次数
   int ans;
   for(int i=2;;i++){//假设数组起始下标为1
     if(a[i]!=a[i-1]&&cnt!=2){
       ans = i;//ans即为所求
       break;//找到了直接跳出循环
     }
     if(a[i]==a[i-1]){//两个相等就cnt++
       cnt++;
     }
     if(a[i]==a[i-1]&&cnt==2){//两个不等但是cnt为2说明前面一个字符出现了两次
       cnt = 1;
     }
   return ans;
}

3.算法时间复杂度为O(n)


评分及理由

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

得分:1分

理由:学生的设计思想虽然提到了遍历数组和记录元素出现次数,但描述不够清晰,且未明确指出“仅比较偶数坐标元素”这一关键点。此外,逻辑上存在冗余(如记录次数并判断是否为2),不符合题目要求的“高效”设计。

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

得分:3分

理由:

  • 代码逻辑错误:循环条件不完整(缺少终止条件),且数组下标假设为1与常规C/C++约定不符(应为0起始)。
  • 逻辑冗余:通过cnt统计次数并判断是否为2,与题目要求的“相同元素一定相邻”条件不符,导致算法效率降低。
  • 语法错误:for(int i=2;;i++)中的中文括号和缺少终止条件。
  • 返回值错误:返回的是下标i而非元素值a[i]

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

得分:1分

理由:虽然学生正确指出时间复杂度为O(n),但因其算法实际逻辑错误(如循环可能无限执行或返回错误结果),时间复杂度分析的前提不成立,故扣1分。

题目总分:1+3+1=5分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发