嗨,我对这个挑战有点小问题:
给定一个介于2和12之间的数字,用两个六边形骰子计算滚这个数字的几率。通过对所有组合进行详尽的循环计算,并计算给您该值的结果的分数,来计算它。不要使用公式。
我的解决方案是:
let givenNumber = 10
var cube1 = 1
var cube2 = 1
var count = 0
let allCombinations = 36
while (cube1 != 6 || cube2 != 6) {
if cube1 + cube2 == givenNumber {
count += 1
}
if cube1 != 6 {
cube1 += 1
} else {
cube1 = 1
cube2 += 1
}
}
let probability = Double(count) / Double(allCombinations)
print(probability)
它起作用,但我不明白为什么:)因为我相信它应该是:
while (cube1 != 6 && cube2 != 6)
只要cube1和cube2不等于6(在英语语法中不确定是否正确,但我希望你知道我的意思),这个循环就会重复,当cube1和cube2都等于6时,应该停止。但当只有cube1等于6时,它就停止了。我以为它会用:/。
因为我不明白,我做了不同的事情:
let givenNumber = 10
var cube1 = 1
var cube2 = 1
var count = 0
let allCombinations = 36
while true {
if cube1 + cube2 == givenNumber {
count += 1
}
if cube1 != 6 {
cube1 += 1
} else {
cube1 = 1
cube2 += 1
}
if cube1 == 6 && cube2 == 6 {
break
}
}
let probability = Double(count) / Double(allCombinations)
print(probability)
没关系,但也许你能解释我为什么“while&/”这个词有问题?
谢谢!
最佳答案
这是基本的逻辑,让我告诉你哪里出错了。这个
我想重复这个循环,只要cube1和cube2不等于6
转换为!(cube1 == 6 && cube2 == 6)
而不是(cube1 != 6 && cube2 != 6)
。
前者可以通过使用(De Morgan's Laws)得到原始表达式来减少:
!(cube1 == 6 && cube2 == 6)
!(cube1 == 6) || !(cube2 == 6)
cube1 != 6 || cube2 != 6