Как постоянно обновлять номера, если сумма их мода> 10 в Swift - PullRequest
0 голосов
/ 06 марта 2019

Как можно получить A и B, чтобы сумма их модов была меньше 10?Я попробовал код ниже, и если число как 15 и 12, все готовоНо если числа как 15 и 17, он продолжает работать вечно.Вот код, который я пробовал

    a = Int.random(in: 10...100)
    b = Int.random(in: 10...100)
    c = a % 10
    d = b % 10

    while c + d > 10 {
        a = Int.random(in: 10...100)
        b = Int.random(in: 10...100)
    }


    print(a)
    print(b)

1 Ответ

1 голос
/ 06 марта 2019

c и d никогда не обновляются в вашем коде. Так что, если при первом выстреле вы не получите a и b правильно, вы попадете в бесконечный цикл. Вы можете исправить это, обновив их внутри цикла while. Или, может быть, вы думаете о c и d как функциях, которые вычисляются всякий раз, когда a и b изменяются:

var a = Int.random(in: 10...100)
var b = Int.random(in: 10...100)

var c: () -> Int = { a % 10 }
var d: () -> Int = { b % 10 }

while c() + d() > 10 {
    a = Int.random(in: 10...100)
    b = Int.random(in: 10...100)
}

Вы также можете сгенерировать b таким образом, что вы всегда будете уверены, что сумма модов меньше или равна 10:

var a = Int.random(in: 10 ... 100)
var b = Int.random(in: 1 ... 9) * 10 + Int.random(in: 0 ... 10 - a % 10)

С этим выражением b будет принимать значения от 10 до 99, а не 100. Чтобы настроить верхнюю границу, вы можете определить b следующим образом:

var b = Int.random(in: 1 ... 10) * 10
b += b == 100 ? 0 : Int.random(in: 0 ... 10 - a % 10)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...