科目组合
计算机: 数据结构 、计算机组成原理 、操作系统 、计算机网络
1、要找出峰谷对,且A[i]为峰,A[j]为谷 且i<j
有且仅能先找到峰,故如果先找到谷,则在寻找的过程中,先找到第一个峰,在后续找谷的过程中若找到更大的峰则更新,否则找到最小的谷。若更新更大的峰,则将谷清0,重新找谷。
最后返回保存最大的峰,和最小的谷,若不存在则返回0
2、
int func(int* A , int n){
if(n < 3)return 0;
int maxpeak = 0;
int minpeak = 0;
int ans = 0;
for(int i = 1 ; i < n-1 ; i++){
if(A[i] < A[i-1] && A[i] < A[i+1]){
if(maxpeak != 0){
minpeak = min(minpeak , A[i]);
ans = maxpeak - minpeak;
}
}
if(A[i] > A[i+1] && A[i] > A[i-1]){
if(maxpeak == 0)maxpeak = A[i];
if(maxpeak != 0)maxpeak = max(maxpeak , max);
}
}
return ans;
}
3、空间复杂度O(1);时间复杂度O(n);
评分及理由
(1)得分及理由(满分4分)
得分:0分。
理由:学生的设计思想核心是“先找到峰,然后在其后找谷;若遇到更大的峰则更新峰并清空之前的谷重新找谷”。该思路试图在一次遍历中动态更新,但无法保证最终得到的是全局最大差值。例如,可能在早期遇到一个较大峰值和一个很小谷值,得到较大差值;但随后又遇到一个更大的峰和一个中等谷值,学生算法会清空前面的谷重新找谷,可能丢失最优解。此外,学生代码中将峰初始值设为0,若峰值为负数则无法正确记录。整体设计思想存在逻辑漏洞,不能正确解决“所有峰谷对中A[i]-A[j]最大”的问题,因此不得分。
(2)得分及理由(满分7分)
得分:1分。
理由:学生代码存在多处逻辑错误和语法错误,仅能看出基本框架和判断峰谷的意图,给1分。
minpeak实际用于保存最小谷值,容易误解,但不直接扣分。maxpeak != 0使用哨兵值0不可靠:若峰值为0或负数,会误判为未找到峰。应使用布尔标记或INT_MIN。maxpeak = max(maxpeak , max);中的max未定义,应为A[i],属于严重语法/逻辑错误。minpeak,导致峰谷配对可能不满足i < j(因为minpeak可能来自当前峰之前)。ans,若最后一个峰之后没有谷,或者最优峰谷对中谷在峰之后但在循环中未及时更新ans,可能遗漏最优解。ans初始为0,但逻辑上不严谨。由于代码无法正确运行并得到正确结果,仅保留基本框架分1分。
(3)得分及理由(满分2分)
得分:1分。
理由:学生给出的时间复杂度O(n)和空间复杂度O(1)从算法结构上看是合理的(单次遍历,常数个变量),与标准答案的O(n)时间、O(n)空间相比,空间更优。但鉴于其算法逻辑本身错误,复杂度分析虽形式正确但不能弥补主体错误,故给1分。
题目总分:0+1+1=2分

评分及理由
(1)得分及理由(满分3分)
学生作答:最短路径长度为18,路径为 1-3-5-7-9-10。
标准答案:最短路径长度为18,路径为 1-3-5-7-9-10。
理由:最短路径长度和路径均完全正确,符合标准答案。本题满分3分,得3分。
本问得分:3分。
(2)得分及理由(满分3分)
学生作答:雨天时无向图仍为连通图,所有城市还能连通;1到10最短路径长度为20,路径为 1-2-4-7-9-10。
标准答案:所有城市能连通;最短路径长度为20,路径为 1-2-4-7-9-10。
理由:连通性判断正确,最短路径长度和路径均与标准答案一致。本题满分3分,得3分。
本问得分:3分。
(3)得分及理由(满分4分)
学生作答:晴天最小生成树总长度=34;雨天最小生成树总长度=40。
标准答案:晴天总长度为31;雨天总长度为35。
理由:学生给出的晴天和雨天最小生成树总长度均与标准答案不符,说明Kruskal或Prim算法过程中选边错误,未得到正确的MST。该问满分4分,晴天、雨天各2分,学生两处均错误,故得0分。
本问得分:0分。
题目总分:3+3+0=6分
1、
主存30bit
块大小=64B 块内偏移=6bit
直接映射 块数=32KB/64B=512
块索引位 = 9bit
标记位=30-9-6=15bit
2、0000 1234H
末15bit = 001 0010 0011 0100B
块号=0 01 00 10 00=048H
此块未命中
0000 1278H
末15bit = 001 0010 0111 1000B
块号=0 01 00 10 01=049H
此块未命中
0000 2234H
末15bit=010 0010 0011 0100B
块号=0 10 00 10 00=088H
此块未命中
0000 1234H
块号=048H此块命中
命中率=25%
3、
读操作=0.5*(0.9*10ns + 0.1*(10 + 100)ns)=10ns
写操作=0.5*(0.9*10ns + 0.1*(0.2*(100)+10+100))=11ns
平均值=21ns
评分及理由
(1)得分及理由(满分3分)
学生正确计算出:主存地址30位、块内偏移6位、块索引9位、标记位15位。与标准答案完全一致。得3分。
(2)得分及理由(满分3分)
学生计算了4次访问的块号,分别为048H、049H、088H,第4次访问与第1次相同,命中。命中率=1/4=25%。
但需要注意:学生提取的主存块号是错误的。学生从地址低15位(而非完整低15位作为块索引/标记分析)提取块号,得到048H、049H、088H等值。实际正确答案应为:0x1234的地址二进制为0000 0000 0000 0001 0010 0011 0100,低6位(块内偏移)为110100,去掉低6位后的块号为0000 0000 0000 0000 0100 1000 1001 = 0x0489 = 1161,之前标准答案按整除64计算为72(十进制),两者不一致。学生计算方式是将16位地址直接拆分,忽略了地址位宽。0x00001234按整除64计算块号为0x1234//0x40=0x48=72,块索引=72 mod 512=72。学生提取低15位得到0x0489=1161,取低位得到048H=72,实际上通过另一种路径得到了正确的Cache块索引(72 mod 512=72),结果正确但中间过程表述不规范。综合判断:学生最终计算的结果(块索引72、73、136;命中率25%)与标准答案一致。答案正确,不扣分。得3分。
(3)得分及理由(满分4分)
学生读操作计算为:0.5*(0.9*10 + 0.1*(10+100))=0.5*20=10ns,正确。
写操作计算为:0.5*(0.9*10 + 0.1*(0.2*(100)+10+100))=0.5*(9+0.1*(20+110))=0.5*(9+13)=0.5*22=11ns。
学生这里的逻辑:写不命中时,脏块概率20%,脏块写回时间100ns,然后调入主存块100ns,写Cache 10ns,总计210ns;非脏块调入100ns+写Cache 10ns=110ns;写不命中平均=0.2*210+0.8*110=130ns;写平均=0.9*10+0.1*130=22ns。但学生表达式写成了0.1*(0.2*(100)+10+100),即脏块写回时间只算了100ns,然后加了10+100=110ns,合计210ns,与标准答案一致。然后写操作整体先乘以0.5,最终平均=10+11=21ns。逻辑正确,计算结果正确。
但需注意:学生最终答案21ns正确。得4分。
题目总分:3+3+4=10分
1、最小时钟周期=4ns
2、总时间=20ns+99*4ns=20+396=416ns
3、100条指令中有20条分支指令
预测失败的指令条数=4条
额外惩罚=8个时钟周期
总时钟周期=5+99+8=112T
平均CPI=1.12
4、总时间=1.12*4*100ns=448ns
分支指令预测成功时为20ns
预测失败时为28ns
预测成功总时间=0.8*(20+99*4)ns
预测失败总时间=0.2*(20+99*4)ns + 32ns
总时间=448ns
评分及理由
(1)得分及理由(满分2分)
得分:2分。理由:学生回答最小时钟周期为4ns,正确。时钟周期由最慢流水段MEM决定,MEM段延迟为4ns,因此该部分满分。
(2)得分及理由(满分3分)
得分:3分。理由:学生计算总时间为20ns + 99×4ns = 416ns,结果正确。该计算方法实质上是第一条指令通过5段需5×4=20ns,后续99条指令每个时钟周期完成1条,因此总时间为20+99×4=416ns,与标准答案104×4=416ns一致。思路正确,不扣分。
(3)得分及理由(满分4分)
得分:2分。理由:学生正确算出分支指令20条、预测失败4条、额外惩罚8个时钟周期,这部分逻辑正确。但总时钟周期计算错误:学生写“总时钟周期=5+99+8=112T”,该式将流水线充满的5个周期与额外惩罚8个周期叠加,得到112个时钟周期,平均CPI=1.12。而标准答案中,基础时钟周期数应为100(对应100条指令),总时钟周期数=100+8=108,CPI=1.08。学生的错误在于把无冒险时执行100条指令的基础周期数误算为5+99=104,又额外加了8,导致重复计算了流水线充满开销,属于逻辑错误。因此扣2分。
(4)得分及理由(满分4分)
得分:2分。理由:学生基于(3)中错误的CPI=1.12计算总时间为1.12×4×100ns=448ns,结果错误,应扣分。但学生后续尝试用分支预测成功/失败加权计算总时间,思路与标准答案不同,且最终结果448ns与错误CPI一致。由于(3)逻辑错误导致(4)结果错误,不能给满分。考虑到(4)计算过程与(3)错误结果一致,且未出现新的独立逻辑错误,给予2分。
题目总分:2+3+2+2=9分

评分及理由
(1)得分及理由(满分5分)
得0分。学生代码逻辑错误:生产者进程中应先生产产品,再进行P操作申请空位和互斥锁;消费者进程中应先P操作申请产品并互斥取出,再进行消费。学生代码将“生产A/B”放在了P操作之后,将“消费A/B”放在了V操作之前,这会导致:生产者未生产就占用空位、消费者未取出产品就消费并释放空位,违反同步互斥语义,属于核心逻辑错误。虽然信号量使用类型正确,但操作顺序错误,因此该部分不得分。
(2)得分及理由(满分2分)
得0分。学生给出了总耗时18,与标准答案一致,但第(1)问代码存在严重逻辑错误,第(2)问的计算过程可能是基于错误代码或错误理解得出的,思路不正确,因此不给分。
题目总分:0+0=0分

评分及理由
(1)得分及理由(满分2分)
学生给出的首次进入运行状态时间:P1=0ms,P2=3ms,P3=5ms,P4=6ms,与标准答案完全一致。得2分。
(2)得分及理由(满分4分)
标准答案中:P1完成时间8ms、周转时间8ms、带权周转时间8/3;P2完成时间11ms、周转时间9ms、带权周转时间9/2;P3完成时间13ms、周转时间9ms、带权周转时间9/5;P4完成时间15ms、周转时间9ms、带权周转时间9/1。
学生答案中:P1、P2、P4的数据与标准答案一致;但P3完成时间为17ms、周转时间为13ms、带权周转时间为13/5,与标准答案不一致。P3正确应为完成时间13ms、周转时间9ms、带权周转时间9/5。因此P3的3个数据均错误,扣1分。该项得3分。
(3)得分及理由(满分2分)
标准答案平均周转时间为35/4=8.75ms,平均带权周转时间约为4.49。
学生按错误数据计算:平均周转时间=(8+9+13+9)/4=39/4ms,错误;平均带权周转时间=(8/3+9/2+13/5+9)/4,即约(2.67+4.5+2.6+9)/4≈4.69,不是563/120;且563/120≈4.69,也与正确值4.49不符。因此两个结果均错误,扣2分。该项得0分。
题目总分:2+3+0=5分
第(1)问:子网划分
总IP地址块:202.117.12.0/24(C类地址,主机位8位)。根据各部门主机数量需求:
技术部:50台主机,需至少6位主机位(2^6=64),子网掩码为/26(255.255.255.192)。
市场部:25台主机,需至少5位主机位(2^5=32),子网掩码为/27(255.255.255.224)。
财务部:10台主机,需至少4位主机位(2^4=16),子网掩码为/28(255.255.255.240)。
按顺序分配,得到:
部门 网络地址 子网掩码 可用主机范围
技术部 202.117.12.0 255.255.255.192 (/26) 202.117.12.1 ~ 202.117.12.62
市场部 202.117.12.64 255.255.255.224 (/27) 202.117.12.65 ~ 202.117.12.94
财务部 202.117.12.96 255.255.255.240 (/28) 202.117.12.97 ~ 202.117.12.110
技术部主机A的IP 202.117.12.10属于技术部子网,符合要求。
第(2)问:路由器R1路由表
路由器R1的接口连接:
E0 → 技术部子网(202.117.12.0/26)
E1 → 市场部子网(202.117.12.64/27)
E2 → 财务部子网(202.117.12.96/28)
S0 → 外部网络(默认路由)
路由表如下:
目的网络 子网掩码 下一跳接口
202.117.12.0 255.255.255.192 E0
202.117.12.64 255.255.255.224 E1
202.117.12.96 255.255.255.240 E2
0.0.0.0 0.0.0.0 S0
(默认路由也可写为:目的网络0.0.0.0,子网掩码0.0.0.0,下一跳S0)
第(3)问:TCP报文段序列号与确认号
已知:A的初始序列号(ISN_A)= 1000,B的初始序列号(ISN_B)= 2000。TCP连接已建立(三次握手完成),因此SYN报文已消耗一个序列号。A发送的第一个数据字节的序列号为 ISN_A + 1 = 1001。
主机A发送长度为100字节的报文段:
序列号范围:1001 ~ 1100(共100个字节,包含1001和1100)。
该报文段的确认号:A已收到B的SYN(序列号2000),期望B的下一个字节为2001,故确认号为 2001。
主机B收到该报文段后,发送确认报文段:
B期望A发送的下一个字节序列号为 A发送的最后一个字节序列号 + 1 = 1100 + 1 = 1101。
因此,B发送的确认报文段的确认号为 1101。
评分及理由
(1)得分及理由(满分3分)
得分:3分。
理由:学生正确识别了各部门所需主机位(技术部/26、市场部/27、财务部/28),子网掩码及网络地址划分均正确,与标准答案一致。可用主机范围虽非题目强制要求,但计算无误,不影响得分。
(2)得分及理由(满分3分)
得分:3分。
理由:路由表四项均正确,目的网络、子网掩码、下一跳接口匹配标准答案,默认路由写法正确。未重复计分。
(3)得分及理由(满分3分)
得分:0分。
理由:学生将TCP连接建立后的初始序列号处理错误。题目明确“初始序列号A为1000”,通常指已建立连接后发送数据的起始序列号,标准答案按序列号1000起算,而学生自行加1,导致序列号范围、确认号全部错误。具体错误:第一个报文段序列号应为1000-1099,学生答1001-1100;A发送报文段的确认号应为2000,学生答2001;B确认号应为1100,学生答1101。逻辑错误明显,扣3分。
题目总分:3+3+0=6分