我正在研究Euler问题5,即:
2520是可以除以1到10中的每个数字而没有任何余数的最小数字。 从1到20的所有数字均可被整除的最小正数是多少?
我的嵌套循环遇到了问题。我在for
循环中有一个while
循环。我的逻辑是我
如果currentNumber
不是i
的倍数,则检查一个(currentNumber
)对1-20(i
)的数字(使用模块算术检查)
然后它突破了那个循环并尝试下一个最大的数字。
我的问题是我无法弄清楚如何跳出仅我的内循环而不是我的外循环。这是我的代码:
class Five {
init() {
var currentNumber = 1
while true {
for i in 1...20 {
if currentNumber % i != 0 {
currentNumber += 1
continue
}
}
break
}
print("the smallest positive number that is evenly divisible " +
"by all of the numbers from 1 to 20 is \(currentNumber)")
}
}
答案 0 :(得分:1)
你已经得到了一个正确的答案。就像一个附加组件一样 完整性:
标记的continue语句的替代方法是将内部循环移动到一个单独的函数中,您可以从中“提前返回”:
func isDivisibleBy1To20(_ number: Int) -> Bool {
for j in 2...20 {
if number % j != 0 {
return false
}
}
return true
}
var currentNumber = 1
while !isDivisibleBy1To20(currentNumber) {
currentNumber += 1
}
print("solution:", currentNumber)
使用功能方法可以简化为
func isDivisibleBy1To20(_ number: Int) -> Bool {
return !(2...20).contains(where: { number % $0 != 0 })
}
let solution = (1...).first(where: isDivisibleBy1To20)!
print("solution:", solution)
(备注:还有其他更快的方法来解决这个问题。)