如何得到A和B所以他们的mod的总和将小于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)
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
,以便始终确保mod的总和小于或等于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)