5个人分鱼游戏模式体会

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

版本一:

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个人分鱼游戏模式体会)