a378_345 2022-07-09 08:41 采纳率: 100%
浏览 83
已结题

四阶幻方程序代码的注释还有流程图怎么画 今天要交了

大一计算机课答辩四阶幻方问题 今天要交了
def ad(a, b, k):
    if len(b) >= 4 and b[0]+b[1]+b[2]+b[3] != 34:
        return k
    elif len(b) >= 7 and b[0] + b[1] + b[2] + b[3] != b[0] + b[4] + b[5] + b[6]:
        return k
    elif len(b) >= 9 and b[0] + b[1] + b[2] + b[3] != b[3] + b[7] + b[8] + b[6]:
        return k
    elif len(b) >= 11 and b[0] + b[1] + b[2] + b[3] != b[4] + b[9] + b[7] + b[10]:
        return k
    elif len(b) >= 12 and b[0] + b[1] + b[2] + b[3] != b[1] + b[9] + b[8] + b[11]:
        return k
    elif len(b) >= 14 and b[0] + b[1] + b[2] + b[3] != b[5] + b[8] + b[12] + b[13]:
        return k
    elif len(b) >= 15 and b[0] + b[1] + b[2] + b[3] != b[2] + b[7] + b[12] + b[14]:
        return k
    elif len(b) >= 16 and (b[0] + b[1] + b[2] + b[3] != b[6] + b[11] + b[14] + b[15] or b[0] + b[1] + b[2] + b[3] != b[0] + b[9] + b[12] + b[15]):
        return k
    elif len(b) == 16:
        print(b,k)
        k += 1

    for i in range(len(a)):
        b.append(a[i])
        d = a.pop(i)
        k = ad(a, b, k)
        a.insert(i, d)
        b.pop(-1)
    return k

a = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
b = [1]
k = ad(a, b, 0)
print(k)

没有错误
每句话是什么意思
请帮忙注释一下 能带上流程图最好了
  • 写回答

3条回答 默认 最新

  • 溪风沐雪 2022-07-09 09:51
    关注

    流程图再研究下,先简单说明一下原理:

    import time
    def ad(a, b, k):
        # print(a,b)  #如果不能理解,把这两行注释打开,看一下运行过程
        # time.sleep(1)
        if len(b) >= 4 and b[0]+b[1]+b[2]+b[3] != 34: #第一行,只有满足第行和为34,才进行下一个判断
            return k
        elif len(b) >= 7 and b[0] + b[1] + b[2] + b[3] != b[0] + b[4] + b[5] + b[6]: #第一列
            return k
        elif len(b) >= 9 and b[0] + b[1] + b[2] + b[3] != b[3] + b[7] + b[8] + b[6]: #右上到左下的斜线
            return k
        elif len(b) >= 11 and b[0] + b[1] + b[2] + b[3] != b[4] + b[9] + b[7] + b[10]: #第二行
            return k
        elif len(b) >= 12 and b[0] + b[1] + b[2] + b[3] != b[1] + b[9] + b[8] + b[11]: #第二列
            return k
        elif len(b) >= 14 and b[0] + b[1] + b[2] + b[3] != b[5] + b[8] + b[12] + b[13]: #第三行
            return k
        elif len(b) >= 15 and b[0] + b[1] + b[2] + b[3] != b[2] + b[7] + b[12] + b[14]: #第三列
            return k
        elif len(b) >= 16 and (b[0] + b[1] + b[2] + b[3] != b[6] + b[11] + b[14] + b[15] or b[0] + b[1] + b[2] + b[3] != b[0] + b[9] + b[12] + b[15]): #第四行和左上到右下的斜线
            return k
        elif len(b) == 16:
            print(b,k)
            k += 1
     
        for i in range(len(a)):
            b.append(a[i]) #从列表a中依次取数字尝试放入b中
            d = a.pop(i) #记录放入b中的数字
            k = ad(a, b, k) #递归测试
            a.insert(i, d) #如果取出来放入b中的数字测试不合适,则重新放回a
            b.pop(-1) #同时将新添加到b中的数字取出
        return k
     
    a = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] #列表a表示未使用的数字
    b = [1] #列表b代表已使用的数字,且有固定的顺序
    k = ad(a, b, 0)
    print(k)
    

    列表b中数字对应的位置示意

    img


    流程图:

    img

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

报告相同问题?

问题事件

  • 系统已结题 7月17日
  • 已采纳回答 7月9日
  • 修改了问题 7月9日
  • 修改了问题 7月9日
  • 展开全部

悬赏问题

  • ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号