试题
  • 试卷
  • 试题
学段: 学科:
上传图片
或拖拽图片 ,或截图后Ctrl + V上传图片
图片上传失败(原因:图片不够清晰或未拍摄完整)
(图片大小不超过10M)
今日剩余可使用:0
搜索
清空
当前位置: 高中信息技术 / 算法与程序设计 / 算法及程序语言基础 / 过程与自定义函数
  • 1. 小张和小红参加校园知识竞赛,比赛采用抢答模式。每次抢答正确得1分(用"1"表示),答错或未作答得0分(用"0"表示)。当任意一方得分6分及以上且领先对手2分时,该方赢得一局。例如某局数据"101110101"表示小张得6分、小红得3分,局比分6:3。

    小尼用“0”与“1”数字字符串记录了小张连续若干局的竞赛得分数据,该数据存在一处错误,错误在连续多个0的最后一个位置。为了找出错误,小尼的处理方法如图a所示,程序运行示例如图b。

                                               

    (1)小尼的某次记录为:"1010101000101101111001111",按照小尼的修改方式处理后每局的比分为

    (2)定义Find_errors(a)函数,列表a存放小尼记录的比分。函数功能是找出疑似错误位置。

    def Find_errors(a):

           head=-1;   tail=-1

           link= []; i = 0

           while i < len(a):

                 k = i

                 while i < len(a) and a[i] == 0:

                        i += 1

                 if:

                        link.append([i-1,-1])

                        if tail==-1:

                               head=len(link)-1

                        else:

                               link[tail][1]=len(link)-1

                        tail=len(link)-1                  

                 i += 1

    return head,link

    ①在划线处填入合适的代码

    ②若列表a= [1,0,1,0,1,0,0,0,1,1,1,0,1,1,0,1,0,0,1],则link的最终值为

    (3)对每个疑似错误位置分别修改数据,并统计每局比分,请在划线处填入合适的代码。

    def Accumulated_points(a,head,link):

           ans=[] ;     p=head

           while p!=-1:     

                 f1 = 0   ; f2 = 0   ; flag=True

                 k = link[p][0];     a[k] = 1                 

                 sp = str(k + 1) + "             "

                 for j in range(len(a)):

                        if a[j] == 1:

                               f1 += 1

                        else:

                               f2 += 1                                        

                        :

                               sp += "/" + str(f1) + ":" + str(f2)

                               f1 = 0;        f2 = 0                           

                 if f1!=0 or f2!=0:             

                        flag=False

                 if flag:

                        ans.append(sp)             

                 

                 p=link[p][1]

           return ans

    # 获取小尼记录数据,存入列表a中,代码略

    head,link=Find_errors(a)

    ans=Accumulated_points(a,head,link)          

    if len(ans)>0:

           #输出修改后的每局比分,代码略

    else:

           print("记录数据有误")