Swift-查找所有数字1…20的倍数
我正在研究问题5,即: 2520是最小的数字,可以被1到10之间的每一个数字除,没有任何余数。 能被1到20的所有数整除的最小正数是多少 我的嵌套循环有问题。我在Swift-查找所有数字1…20的倍数,swift,loops,modulo,Swift,Loops,Modulo,我正在研究问题5,即: 2520是最小的数字,可以被1到10之间的每一个数字除,没有任何余数。 能被1到20的所有数整除的最小正数是多少 我的嵌套循环有问题。我在while循环中有一个for循环。我的逻辑是我 如果currentNumber不是i的倍数,则根据1-20(i)检查一个数字(currentNumber)(使用模块化算术进行检查) 然后它跳出这个循环,尝试下一个最大的数字 我的问题是我不知道如何跳出我的内环而不是外环。这是我的密码: class Five { init() {
while
循环中有一个for
循环。我的逻辑是我
如果currentNumber
不是i
的倍数,则根据1-20(i
)检查一个数字(currentNumber
)(使用模块化算术进行检查)
然后它跳出这个循环,尝试下一个最大的数字
我的问题是我不知道如何跳出我的内环而不是外环。这是我的密码:
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)")
}
}
你已经得到了一个正确的答案。作为一个附加组件,用于 为完整起见: 有标签的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)
(备注:还有其他更快的方法来解决这个问题。)更快的方法是什么?@keepIT100我不想破坏自己发现这个问题的乐趣!作为提示,它与一些(简单的)数论函数有关。如果你真的不想自己解决,只需在codereview.stackexchange.com上搜索“Euler 5”。