科目组合
计算机: 数据结构 、计算机组成原理 、操作系统 、计算机网络
1.从数组开头开始,以两个元素为一组(下标 0 和 1,2 和 3,...),依次检查每组是否相等。一旦发现某组两个元素不相等,则该组的第一个元素就是只出现一次的元素。若所有组都相等,则最后一个元素(数组长度为奇数时)即为答案。
2.
#include <vector>
using namespace std;
 int findSingleElement(const vector<int>& nums) {
       // 从下标0开始,每次检查两个相邻元素(成对检查)
       for (int i = 0; i < nums.size() - 1; i += 2) {
              // 如果当前元素与其后一个元素不相等,说明当前元素就是只出现一次的那个(因为它没有配对)
              if (nums[i] != nums[i + 1]) { return nums[i]; }
       }
       // 如果所有前面的成对元素都相等,那么最后一个元素就是只出现一次的(数组长度为奇数)
       return nums.back();
}
3.时间复杂度O(N)
评分及理由
(1)得分及理由(满分3分)
学生答案与标准答案基本一致:通过遍历偶数下标元素并与后一个元素比较,找到第一个不匹配的元素。思路正确且完整。得3分。
(2)得分及理由(满分8分)
算法实现与标准答案逻辑一致,使用vector容器但核心逻辑相同。代码注释清晰,边界处理正确(通过返回最后一个元素处理目标在末尾的情况)。但存在以下问题:
- 函数参数使用const vector&,比标准答案的数组指针更安全,但题目要求C或C++,不扣分
- 循环条件使用nums.size()-1,与标准答案的n-1等价
- 返回nums.back()与标准答案返回A[n-1]等价
代码逻辑完全正确,得8分。
(3)得分及理由(满分2分)
正确分析时间复杂度为O(N),与标准答案一致。得2分。
题目总分:3+8+2=13分
1.一定可以得到所有字符对应的编码长度都相同的哈夫曼树,由于所有字符频率相同且 N 为 2 的幂,可以构造出所有编码长度相等的哈夫曼树。每个字符的编码长度为logN。
2.最小 WPL 是NlogN。
3.
评分及理由
(1)得分及理由(满分4分)
学生回答“一定可以得到所有字符对应的编码长度都相同的哈夫曼树”,这与标准答案一致,正确。同时指出每个字符的编码长度为logN(即\(\log_2N\)),这也是正确的。因此本小题得满分4分。
(2)得分及理由(满分2分)
学生回答“最小 WPL 是NlogN”,这与标准答案\(N\times\log_2N\)一致,正确。因此本小题得满分2分。
(3)得分及理由(满分4分)
学生未回答第三小题的任何内容,因此本小题得0分。
题目总分:4+2+0=6分
1.R2为0000Ff38H,R4为FFFFFF38H,R5为00000064H,R6为000001F4H
2.100,500
3.CF=1,ZF=0
4.加法时,CF等于最高位进位。减法时,CF等于最高位进位取反。有符号整数加 / 减法会影响 CF,但 CF 不用于判断有符号溢出。
评分及理由
(1)得分及理由(满分4分)
学生答案:R2=0000FF38H,R4=FFFFFF38H,R5=00000064H,R6=000001F4H,与标准答案完全一致。其中R2是us2(65336)的零扩展,R4是s2(有符号数-200)的符号扩展,R5是m1(us1+us2=65636,截断后为100)的零扩展,R6是m2(us1-us2=-65036,截断后为500)的零扩展。答案正确,得4分。
(2)得分及理由(满分2分)
学生答案:n1=100,n2=500,与标准答案一致。计算过程正确(s1=300,s2=-200,s1+s2=100,s1-s2=500),得2分。
(3)得分及理由(满分2分)
学生答案:CF=1,ZF=0,与标准答案一致。因为us1 (4)得分及理由(满分4分) 学生答案部分正确: 题目总分:4+2+2+2=10分
- 正确部分:加法时CF等于最高位进位;有符号整数加减法会影响CF,但CF不用于判断有符号溢出(2分)。
- 错误部分:减法时CF等于最高位进位取反(错误)。标准答案中CF = Cin ⊕ Cout,减法时Cin=1,因此CF = 1 ⊕ Cout,即Cout取反。学生未明确Cin的作用,表述不严谨,扣1分。
- 扣分后得1分(本小题总分2分)。
1.由于数组按行优先存储,所以空间局部性较好,每个元素只被访问一次,所以时间局部性较差。
2.由于每个主存块为 16 字节,则每个块可以存储 4 个 float 数组元素。直接映射方式,一共 32/16 = 2 行,行号 1 位为 32 位地址中的倒数第 5 位,起始地址 0000 0040H 位于一个块的起始位置。x 和 y 的前半部分映射到 Cache 第 0 行,后半部分映射到第 1 行,访问交替进行,每次都发生冲突替换,全未命中,命中率 = 0%。
3.改用2 - 路组相联映射方式,每组可缓存两个块,x 的 4 个块映射到组 0,y 的 4 个块映射到组 1,每两个块替换一次,命中一半,命中率 = 50%。
4.神人题目,你自己看看你这个条件程序能过编译不呢
评分及理由
(1)得分及理由(满分2分)
学生答案正确描述了空间局部性较好(按行优先存储)和时间局部性较差(每个元素只访问一次),与标准答案一致。得2分。
(2)得分及理由(满分3分)
学生正确分析了Cache行数、块大小、映射关系,并指出x和y的前半部分映射到Cache第0行、后半部分映射到第1行,访问交替导致冲突替换,命中率为0%。分析过程与标准答案一致。得3分。
(3)得分及理由(满分3分)
学生正确指出2路组相联下每组可缓存两个块,但错误地认为x的4个块映射到组0、y的4个块映射到组1。实际上,在2路组相联、块大小为8字节条件下,x和y的块会根据地址映射到相同的组(组0和组1交替),但学生未正确分析组映射关系,仅简单得出命中率50%。虽然结论正确,但分析过程存在错误,扣1分。得2分。
(4)得分及理由(满分3分)
学生未给出任何分析,仅以不当语言评论题目,属于未作答。得0分。
题目总分:2+3+2+0=7分
1.111111
2.周转时间:P1=8s,P2=2s,P3=7s,P4=1s,P5=7s;响应时间:P1=0s,P2=-s,P3=2s,P4=0s,P5=5s
评分及理由
(1)得分及理由(满分3分)
学生未提供进程执行的顺序图,仅写了"1.111111",无法判断其顺序图是否正确。根据评分标准,未作答或完全错误得0分。因此本题得0分。
(2)得分及理由(满分4分)
学生给出了周转时间和响应时间的计算结果:
本小题总计得3.5分(四舍五入后为3.5分)
题目总分:0+3.5=3.5分
semaphore mutex1=1,mutex2=1;
semaphore amount=5,empty=30,full=0;
void yong monk i(i=1,2,3,,,n) ()
{
	while(TRUE)
	{
		P(empty);
		p(amount);
		P(mutex1);
		从井里打水;
		V(mutex1);
		P(mutex2);
		往缸里面倒水;
		V(mutex2);
		V(amount);
		V(full); 
	}
}
void old monk i(i=1,2,3,,,n) ()
{
	while(TRUE)
	{
		P(full);
		P(amount);
		P(mutex2);
		从缸里面取水使用;
		V(mutex2);
		V(amount);
		V(empty); 
	}
}
评分及理由
(1)信号量定义部分(满分2分)
得分:0分
理由:学生定义了mutex1和mutex2作为互斥信号量,但未明确定义水井和水缸的互斥关系;amount信号量含义不明确(可能是水桶数量?但初始值5错误,应为3);empty初始值30错误(应为10);full初始值0正确但含义不明确。信号量定义存在多处错误。
(2)小和尚进程算法(满分3分)
得分:1分
理由:基本流程正确(先申请资源,再打水,再倒水),但存在严重逻辑错误:P(amount)和V(amount)位置错误,应该在互斥操作前后;缺少水缸容量的同步控制;mutex1和mutex2的使用不够清晰。仅因基本思路正确给1分。
(3)老和尚进程算法(满分3分)
得分:1分
理由:基本流程正确(先申请水,再取水),但存在严重逻辑错误:P(amount)和V(amount)位置错误;缺少水桶资源的正确管理;mutex2的使用不够合理。仅因基本思路正确给1分。
题目总分:0+1+1=2分

评分及理由
(1)得分及理由(满分3分)
学生答案正确计算了传播时延:
计算过程与标准答案完全一致,得3分。
(2)得分及理由(满分6分)
学生答案:
虽然计算过程比标准答案简化,但结果正确:
思路正确,结果与标准答案一致,得6分。
题目总分:3+6=9分