搶紅包演算法問題 swift 3.0
阿新 • • 發佈:2019-01-24
搶紅包演算法的討論網上也太多了,這裡不討論好壞問題.這裡只是一個實現也是網上的一個思路(一個紅包發出來,其實份額已經分配好了.)
問題: 第一個人搶的紅包 不會超過 總錢數/總人數*2
解決: 最後跑下洗牌演算法-連結
// ************** 搶紅包問題 **********************
// 區間的隨機值
func getRandomQuJian(startIndex:Int, endIndexIndex:Int)->Int {
// [1 8] 這是隨機1到8 之間的數
let index = Int(arc4random_uniform(UInt32(UInt32(endIndexIndex - startIndex)))+UInt32(startIndex))
return index
}
// 兩個值得隨機分
func getRandomValue(vaule:Int)->Int {
// 異常處理
if vaule < 2 {
return 1
}
let index = getRandomQuJian(startIndex: 1, endIndexIndex: vaule-1)
return index
}
// 隨機後存放價格的陣列
var valueRandomMoney = Array<Int>()
var totalMoney = 3000 //分(錢)
var peoepleNum = 10
valueRandomMoney.removeAll()
while true {
if peoepleNum <= 1 {
valueRandomMoney .append(totalMoney)
break;
}
// 得到一個錢數 ( 每人平均的錢數 乘以2,)
var value = totalMoney/peoepleNum * 2
// 假如上面得到的錢數是 600 ,下面的隨機數最大就是600 最小是1 (最有可能是中間的一個值)
var randomValue = getRandomValue(vaule: value )
//總數錢數減去一個 上面計算的錢數 ,總人數減去一個人 。依次迴圈處理,得到紅包分配的金額
totalMoney = totalMoney - randomValue
peoepleNum -= 1
valueRandomMoney.append(randomValue)
print("----\(valueRandomMoney)");
}