怎样从五个人分鱼游戏提炼模型,以及如何优化代码?
版本一:
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 }
}
:对版本一的优化主要在两个方面:
- 版本二在if-else语句判断中加了break,通过测试发现如果不加break 循环会做完五次。
else {
//如果鱼不够分就将isEnough赋值为false并提前结束分鱼的循环
isEnough = false
break
}
- 版本二最后一条语句加了else关键字
else { total += 1 }
如何提炼模型
-
这个程序流程:while循环 {->[5次for循环(->分支)]->[分支]}的结构 ---线性的结构(也可理解为树状结构)
-
如何终止循环: 1 while循环:用布尔值 2. for 循环 用brak
-
另一个问题: 如何判断是执行了5次for循环的if中的代码,还是有一次执行了else中的代码?
答案在题目中 -
最后的分支 加else 是为了让最后的两部分代码 成为分支结构 而不是线性结构
网友评论