道歉,如果这太简单或以前曾被问过,但我无法在任何地方找到解决方案。
我有一个随机生成'yes'或'no'的函数。如何跟踪和存储序列中连续'no'的最长条纹?
提前致谢!
答案 0 :(得分:2)
我试过这个,你可以将所有条纹值存储在一个数组中,然后找出它的最大值。下面是代码。
var streak = 0
var streakArr = [Int]()
// This will generate the random values
func randomBool() -> Bool {
return arc4random_uniform(2) == 0
}
for i in 0...10 {
let obj = randomBool()
if !obj {
streak += 1
} else {
streak = 0
}
streakArr.append(streak)
}
streakArr // OP- [1, 0, 1, 2, 0, 0, 0, 0, 1, 2, 3]
streakArr.max() // will give you the maximum value ie. 3
答案 1 :(得分:1)
例如,假设GenerateAnswear()
是您生成Yes
或No
func GenerateAnswear() -> String {
switch arc4random() % 2 {
case 0:
return "Yes"
default:
return "No"
}
}
让我们声明一个变量来存储带有初始值0
的条纹
要连续生成一些answears,我们做一个while循环。
在这个循环中,我们调用我们的方法GenerateAnswear()
var n = 10
var streak = 0
repeat {
let answear = GenerateAnswear()
streak = answear == "No" ? streak + 1 : 0
print(answear)
print("streak \(streak)")
n = n - 1
} while n > 0
计算No
的条纹我们正在验证如果等于No
并且streak
的当前1
值增加0
或{{ 1}}如果生成的answear与No
streak = answear == "No" ? streak + 1 : 0
这里有一个上面代码的eample输出。 Streak值存储在我们的局部变量中。做你想做的事情
No
streak 1
Yes
streak 0
Yes
streak 0
Yes
streak 0
No
streak 1
No
streak 2
No
streak 3
Yes
streak 0
Yes
streak 0
Yes
streak 0