1. 程式人生 > >搶紅包演算法問題 swift 3.0

搶紅包演算法問題 swift 3.0

搶紅包演算法的討論網上也太多了,這裡不討論好壞問題.這裡只是一個實現也是網上的一個思路(一個紅包發出來,其實份額已經分配好了.)
問題: 第一個人搶的紅包 不會超過 總錢數/總人數*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)"); }