1.学习总结(2分)
2.PTA实验作业(4分)
2.1 题目1:7-1 jmu-字符串是否对称(20 分)
2.2 设计思路(伪代码或流程图)
定义变量x=0 flag=1作为匹配的标志
定义栈s 存储字符数组n
输入字符串于n中
while(字符n[x]不等于0)
将n[x]入栈
end while
while(x不为0)
if 栈顶与n[a]相等
退栈
else flag=0 break
end while
if flag=0
输出 yes
else 输出 no
2.3 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)
2.4 PTA提交列表说明。
- 这道题我第一个错误是段错误,刚开始我做是自己编写出栈入栈的函数,但是我忘记申请空间,导致错误,后来我索性直接
用C++自带的库函数来进行入栈出栈,更简洁了 - 还有一个错误是我原本是判断到一半的位置,后来我改为全部判断就对了,不知道为什么。
2.1 题目2:7-2 符号配对(20 分)
2.2 设计思路(伪代码或流程图)
定义变量l存放数组长度,flag=0作为匹配的标志,栈s及字符数组a
while(a不为" . ")
for i=0 to l
if a[i]为/*
将+入栈
if a[i]为(
将)入栈
if a[i]为[
将]入栈
if a[i]为{
将}入栈
if a[i]为*/
与栈顶比较相等退栈
else flag=1
if a[i]为)
与栈顶比较相等退栈
else flag=2
if a[i]为]
与栈顶比较相等退栈
eles flag=3
if a[i]为}
与栈顶比较相等退栈
else flag=4
end for
end while
if s为空及flag是为0
输出yes
else
{
输出NO
if 栈顶的值为 + 或)或 ]或 }
分别输出对应右边的缺少符号
else if flag的值若为1或2或3或 4
则输出对应左边边的缺少的符号
}
end while
2.3 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)
2.4 PTA提交列表说明。
-
这道题我做的比较久,因为他的情况比较多,刚开始的时候我直接是先入栈,每个要入栈的与栈顶比较,相等则出栈,否则就是匹配失败,但是
只对了一点,因为遇到]}这种缺少左边的情况就不能判断,所以还要设立一个flag来表示左边的情况。 -
还有一点是我在/*这种符号采用+替代比较方便,还有就是{ [ (入栈时我是直接入)] },这样后面比较时直接比较是否相等就可以知道有没有匹配了,比较方便。
2.1 题目3:7-1 jmu-字符串是否对称(20 分)
2.2 设计思路(伪代码或流程图)
定义变量i, n存放人数,m存放退出的位置 cuont 代表报数的位置
定义队列s
输入n,m的值
判断m是否大于n
若是直接输出 erreo
for i=0 to n
将i入队
end for
while(队列不为空){
将s出队 并count++
if count等于m
输出队顶的值 并且使count=0
else 就再次将已经出队的入队
end while
end for
2.3 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)
2.4 PTA提交列表说明。
- 这道题我本来时思考怎么将报到要退出的人删除,可是队列好像也不能删除,又试了好久,都做不出来,后来看书上有一道例题就是
这种类型的,而他是采用再次入队的方式,符合入队不符合出队变相的实现删除。 - 还有就是我在写完这道题的时候,发现舍友的代码很简洁,原来也可以使用库函数自带的队列函数来操作。可以简洁很多。
3.截图本周题目集的PTA最后排名(3分)
3.1 栈PTA排名
3.2 队列PTA排名
3.3 我的总分:217
4. 阅读代码(必做,1分)
地址
https://blog.csdn.net/qq_36819130/article/details/78378597
截图
- 这道题是银行排队问题的加强版,题面中提到后面的人可以找前面的是朋友的人夹塞,让朋友帮忙办理业务,朋友的办理时间会累加。这个过程可以看作一个插队的过程,即把自己插到朋友的后面。由于朋友帮自己办业务是紧接着他自己刚办完的业务连续办理的,所以自己插在朋友后面和让朋友累加办理时间是等价的。
因此我们可以使用队列模拟,每次 pop 出队首,表示此人已办理完毕。接下来找一个人放到队列中作为下一个要办理的人。而下一个的人选是有要求的,即优先寻找一个到达时间不晚于自己离开时间的朋友,让他排在自己后面,如果找不到则按原顺序找自己后面的第一个人,让他排在自己后面。这样不断循环并累加等待时间,直到队列为空即可。 - 重点是判断来的时间与朋友的时间是否冲突,还有就是插队,不冲突直接入队就行。