嗨,我对这个挑战有点小问题:
给定一个介于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

10-02 15:15