小火炬666 2021-10-29 13:34 采纳率: 60%
浏览 75
已结题

b站程序员节的蚂蚁的题目,最后得出的答案和预期不符


'''
有一根长27厘米的细木杆,
在第3厘米、7厘米、11厘米、17厘米、23厘米这五个位置上各有一只蚂蚁。
木杆很细,不能同时通过两只蚂蚁。
开始时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或调头,但不会后退。
当任意两只蚂蚁碰头时,两只蚂蚁会同时调头朝反方向走。
假设蚂蚁们每秒钟可以走一厘米的距离,求所有蚂蚁都离开木杆的最短时间和最长时间。
'''

all_time_list=[]
zero_list=[None,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,None]

def move_left(lis,i):
    list=lis
    i=int(i)
    a = lis.index(i)
    if list[a-1] != None:
        list[a-1] = i
    list[a] = 0
    return list

def move_right(lis,i):
    list=lis
    i=int(i)
    a=lis.index(i)
    if list[a+1] !=None:
        list[a + 1] = i
    list[a] = 0
    return list

sta=[0,1]
#0=left 1=right


for i in sta:
    for j in sta:
        for r in sta:
            for m in sta:
                for n in sta:
                    list = [None,0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 5, 0, 0, 0,None]
                    sta_list=[None,i,j,r,m,n]
                    num_list = [1, 2, 3, 4, 5]
                    a=0
                    while True:
                        if list == zero_list:
                            all_time_list.append(a)
                            break

                        if list !=zero_list:
                            for num in num_list:
                                if num in list:
                                    if list[list.index(num) + 1] == 0 and sta_list[num] == 1:
                                        list = move_right(list, num)


                                    else:
                                        if list[list.index(num) + 1] != 0 and sta_list[num] == 1:
                                            if list[list.index(num) + 1] == None:
                                                list = move_right(list, num)

                                            else:
                                                list = move_left(list, num)
                                                sta_list[num] = 0
                                                sta_list[list[list.index(num) + 1]] = 1

                                        else:
                                            if list[list.index(num) - 1] == 0 and sta_list[num] == 0:
                                                list = move_left(list, num)

                                            else:
                                                if list[list.index(num) - 1] != 0 and sta_list[num] == 0:
                                                    if list[list.index(num) - 1] == None:
                                                        list = move_left(list, num)
                                                    else:
                                                        list = move_right(list, num)
                                                        sta_list[num] = 1
                                                        if list.index(num) - 1 != 0:
                                                            sta_list[list[list.index(num) - 1]] = 0
                            a += 1

print(min(all_time_list))
print(max(all_time_list))

正确答案是11,24
程序输出为:12,25
求指导

  • 写回答

3条回答 默认 最新

  • Fioman_Hammer 2021-10-29 14:30
    关注
    all_time_list = []
    zero_list = [None, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, None]
    
    
    def move_left(lis, i):
        list = lis
        i = int(i)
        a = lis.index(i)
        if list[a - 1] != None:
            list[a - 1] = i
        list[a] = 0
        return list
    
    
    def move_right(lis, i):
        list = lis
        i = int(i)
        a = lis.index(i)
        if list[a + 1] != None:
            list[a + 1] = i
        list[a] = 0
        return list
    
    
    sta = [0, 1]
    # 0=left 1=right
    
    for i in sta:
        for j in sta:
            for r in sta:
                for m in sta:
                    for n in sta:
                        list = [None, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 5, 0,0, None]
                        sta_list = [None, i, j, r, m, n]
                        num_list = [1, 2, 3, 4, 5]
                        a = 0
                        while True:
                            if list == zero_list:
                                all_time_list.append(a)
                                break
                            if list != zero_list:
                                for num in num_list:
                                    if num in list:
                                        if list[list.index(num) + 1] == 0 and sta_list[num] == 1:
                                            list = move_right(list, num)
    
                                        else:
                                            if list[list.index(num) + 1] != 0 and sta_list[num] == 1:
                                                if list[list.index(num) + 1] == None:
                                                    list = move_right(list, num)
                                                else:
                                                    list = move_left(list, num)
                                                    sta_list[num] = 0
                                                    sta_list[list[list.index(num) + 1]] = 1
                                            else:
                                                if list[list.index(num) - 1] == 0 and sta_list[num] == 0:
                                                    list = move_left(list, num)
                                                else:
                                                    if list[list.index(num) - 1] != 0 and sta_list[num] == 0:
                                                        if list[list.index(num) - 1] == None:
                                                            list = move_left(list, num)
                                                        else:
                                                            list = move_right(list, num)
                                                            sta_list[num] = 1
                                                            if list.index(num) - 1 != 0:
                                                                sta_list[list[list.index(num) - 1]] = 0
                                a += 1
    print(min(all_time_list))
    

    答案

    img

    如果觉得答案对你有帮助,请点击下采纳,谢谢~

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 11月6日
  • 已采纳回答 10月29日
  • 创建了问题 10月29日

悬赏问题

  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
  • ¥15 钢筋实图交点识别,机器视觉代码
  • ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)
  • ¥50 400g qsfp 光模块iphy方案
  • ¥15 两块ADC0804用proteus仿真时,出现异常
  • ¥15 关于风控系统,如何去选择
  • ¥15 这款软件是什么?需要能满足我的需求
  • ¥15 SpringSecurityOauth2登陆前后request不一致