Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift-查找所有数字1…20的倍数_Swift_Loops_Modulo - Fatal编程技术网

Swift-查找所有数字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() {

我正在研究问题5,即:

2520是最小的数字,可以被1到10之间的每一个数字除,没有任何余数。 能被1到20的所有数整除的最小正数是多少

我的嵌套循环有问题。我在
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”。