Swift - 查找所有数字 1...20 的倍数
Swift - Find number that is a multiple of all numbers 1...20
我正在研究 Euler 问题 5,即:
2520是能被1到10的每一个数整除而没有余数的最小数。
能被1到20的所有数整除的最小正数是多少?
我的嵌套循环有问题。我在 while
循环中有一个 for
循环。我的逻辑是
检查数字 (currentNumber
) 与 1-20 (i
),如果 currentNumber
不是 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)")
}
}
你已经得到了一个很好的正确答案。正如 add-on,对于
为了完整起见:
标记的 continue 语句的替代方法是将内部循环移动到一个单独的函数中,您可以从中“提早 return”:
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 % [=11=] != 0 })
}
let solution = (1...).first(where: isDivisibleBy1To20)!
print("solution:", solution)
(备注:还有其他更快的方法可以解决这个问题。)
我正在研究 Euler 问题 5,即:
2520是能被1到10的每一个数整除而没有余数的最小数。 能被1到20的所有数整除的最小正数是多少?
我的嵌套循环有问题。我在 while
循环中有一个 for
循环。我的逻辑是
检查数字 (currentNumber
) 与 1-20 (i
),如果 currentNumber
不是 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)")
}
}
你已经得到了一个很好的正确答案。正如 add-on,对于 为了完整起见:
标记的 continue 语句的替代方法是将内部循环移动到一个单独的函数中,您可以从中“提早 return”:
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 % [=11=] != 0 })
}
let solution = (1...).first(where: isDivisibleBy1To20)!
print("solution:", solution)
(备注:还有其他更快的方法可以解决这个问题。)