美文网首页
5个人分鱼游戏模式体会

5个人分鱼游戏模式体会

作者: 写啥呢 | 来源:发表于2016-08-20 11:50 被阅读0次

    怎样从五个人分鱼游戏提炼模型,以及如何优化代码?

    版本一:

    var total = 1
    var bool  = true
    while bool{
        // 用当次循环时total的值作为鱼的总数
        var fish = total
        // 假设鱼的数量足够五个人分
        var isEnough = true
        //通过循环模拟五个人分鱼的过程
        for _ in 1...5 {
            //        检查剩下的与是否够分
            if (fish - 1) % 5 == 0 {
                fish = (fish - 1) / 5 * 4
            }
            else{
                //            如果鱼不够分就将isEnough赋值为false并提前结束分鱼的循环
                isEnough = false
                bool = true
            }
        }
        if isEnough{
            print(total)
            bool = false
        }
        total += 1
    }
    
    

    版本二:(对版本一的优化)

    var total = 1
    var bool = true
    while bool {
        // 用当次循环时total的值作为鱼的总数
        var fish = total
        // 假设鱼的数量足够五个人分
        var isEnough = true
        //通过循环模拟五个人分鱼的过程
        for _ in 0..<5 {
            //        检查剩下的与是否够分
            if (fish - 1) % 5 == 0 {
                fish = (fish - 1) / 5 * 4
            }
            else {
                 //如果鱼不够分就将isEnough赋值为false并提前结束分鱼的循环
                isEnough = false
                break
            }
        }
        
        if isEnough {
            print(total)
            bool = false
        }
        else { total += 1 }
    }
    

    :对版本一的优化主要在两个方面:

    1. 版本二在if-else语句判断中加了break,通过测试发现如果不加break 循环会做完五次。
     else {
                 //如果鱼不够分就将isEnough赋值为false并提前结束分鱼的循环
                isEnough = false
                break
            }
    
    1. 版本二最后一条语句加了else关键字
    else { total += 1 }
    

    如何提炼模型

    1. 这个程序流程:while循环 {->[5次for循环(->分支)]->[分支]}的结构 ---线性的结构(也可理解为树状结构)

    2. 如何终止循环: 1 while循环:用布尔值 2. for 循环 用brak

    3. 另一个问题: 如何判断是执行了5次for循环的if中的代码,还是有一次执行了else中的代码?
      答案在题目中

    4. 最后的分支 加else 是为了让最后的两部分代码 成为分支结构 而不是线性结构

    相关文章

      网友评论

          本文标题:5个人分鱼游戏模式体会

          本文链接:https://www.haomeiwen.com/subject/xakisttx.html