搶紅包算法問題 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)");


}
發佈了45 篇原創文章 · 獲贊 39 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章