• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >编程问答 > 看不懂quro上关于android解锁种数的代码

看不懂quro上关于android解锁种数的代码

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-07

佚名通过本文主要向大家介绍了quro,机灵小不懂,不懂女人,不懂撒娇的女人粤语,上校大叔不懂爱等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:看不懂quro上关于android解锁种数的代码
描述:

这个是链接 How many combinations does Android 9 point unlock have?

min_seq_length = 4

def Middle(a, b):
    """Return the node between a and b if there is one, or None."""
    if (a+b)%2 != 0:
        return None
    mid = (a+b)/2
    if mid == 5:
        return mid
    if a%3 == b%3:
        return mid
    if (a-1)/3 == (b-1)/3:
        return mid
    return None

def NextValid(base):
    """Generate valid moves j+1 given a sequence of moves 1..j."""
    if len(base) >= 9:
        return
    if len(base) == 0:
        for i in xrange(1,10):
            yield i
        return
    for i in xrange(1,10):
        if not i in base:
            mid = Middle(i, base[-1])
            if mid is None or mid in base:
                yield i

def Sequences(base):
    """Generator for valid sequences of moves."""
    if len(base) >= min_seq_length:
        yield list(base)
    for n in NextValid(base):
        for s in Sequences(base + [n]):
            yield s

seqs_of_length = [0]*10

for seq in Sequences([]):
    # if len(seq) == 9:
    #   print seq
    seqs_of_length[len(seq)] += 1
print 'Sequences by length:', seqs_of_length
print 'Total number of sequences:', sum(seqs_of_length)

解决方案1:

这段代码共有三个函数,连带main在内就是4个代码块,从下往上依次为:

1 main
for seq in Sequences([]):中Sequence([])是以一个点都没有的空状态作为初始状态传入Sequence中。Sequence会返回一个生成器,该生成器可以生成所有节点数大于min_sqe_length的连法。
下面一行则是判断当前遍历到的方法的步骤数,然后将对应步骤数的计数器加1.
最后两行分别输出每一种长度对应的连法种数,以及所有长度的总数。

2 Sequence函数
Sequence实际上是递归函数。base参数就是当前所对应的连法,下面的if语句会做一次判断,如果base的长度达于最小值则将该情况输出,否则略过,直接进入下一步。
下一步首先通过NextValid找到下一步可以连的点的集合,然后遍历该集合对于每一个点都将它与base合并后递归调用Sequence。实质上就是一个遍历树的过程。
需要注意的是Sequence中通过调用yield进行输出可能难以理解,可以等价的转化为list就容易理解了。每个Sequence函数实际上就是讲起调用的子函数所返回的所有list合并后并将自己的base加入,生成一个新的list返回上一级。

3 NextValid函数
该函数可以根据已经连过的点集合找到可以连的下一个点集。
首先如果base长度为9直接返回,因为9个点都连过了。
然后如果base长度为0则返回1-9所有的点。
最后对于其他情况,遍历1-9,找出所有i并返回,i不在base集合中且Middle(i, base[-1])不存在。换句话说就是i不曾被连过且i与之前最后一个点形成的连线中不存在未被连过的点。

4 Middle函数
作用为判断指定两点之间是否有第三点。如果存在第三点且第三点没有被不在之前经过的点之中,那么ab两点是无法直连的。这里用了多种判断,包括若第三点存在则ab之和必为偶数,若ab模3同余则ab在同一列等方法。


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 看不懂quro上关于android解锁种数的代码

相关文章

  • 2017-06-07 请教各位前辈如何动态扩展代码
  • 2017-06-07 参照网上资源写的,下载图片,但是下载的图片都是花的,求指教
  • 2017-06-07 关于单列模式和内存相关的
  • 2017-06-07 七牛删除文件?要多长时间?
  • 2017-06-07 OpenOffice能否把ms2007的wordexcel和ppt转换为pdf文件
  • 2017-06-07 python爬虫Python:这个字符串是哪里出错?
  • 2017-06-07 什么样的unittest是一个好的unittest
  • 2017-06-07 下载的qshellubuntu下如何使用
  • 2017-06-07 python__unicode__有点疑问
  • 2017-06-07 python或者shell脚本去调用这个已经安装好的upload模块

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 安卓七牛SDK上传多个文件的问题
    • (python)如何在dataframe中删除某行当某列值为nan时?
    • (redis)最近折腾一个一元云购,碰到一个获取幸运号码问题发出来讨论一下。
    • 已知多组两个数据,如何得出连个数据的计算公式?
    • 关于pythonxmlrpc链接问题的求助
    • Nginx$upstream_http_content_type正则问题
    • scrapy有一行代码不是特别懂
    • fileisnotspecifiedinmultipart
    • git提交代码完成,但是命令行没有结束,怎么回事?
    • (golang)etcd消息队列queue,如何解决global的index增长?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有