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 出队首,表示此人已办理完毕。接下来找一个人放到队列中作为下一个要办理的人。而下一个的人选是有要求的,即优先寻找一个到达时间不晚于自己离开时间的朋友,让他排在自己后面,如果找不到则按原顺序找自己后面的第一个人,让他排在自己后面。这样不断循环并累加等待时间,直到队列为空即可。
  • 重点是判断来的时间与朋友的时间是否冲突,还有就是插队,不冲突直接入队就行。

5. 代码Git提交记录截图

 posted on 2018-04-14 22:18  陈张鑫  阅读(305)  评论(3编辑  收藏  举报