获得礼物概率

1.有一个活动有A,B,C 三样礼物, 现在要编写编写算法,实现 A礼物出现的概率是(99.9),B 礼物出现的概率是(0.09),C 礼物出现的概率是(0.01)

        var a = 0,b = 0,c = 0;
        for _ in 1...100000 {
            if (randomMain(persen: "99.9") == true){
                a = a + 1;
               // print("A");
            }
            if(randomMain(persen: "0.09") == true){
                b = b + 1;
                //print("B");
            }
            if(randomMain(persen: "0.01") == true){
                c = c + 1;
               // print("C");
            }
        }
        
        print("A = \(a) - B = \(b) - C = \(c)")

输出:

A = 1000 - B = 11 - C = 1

实现:

func randomMain(persen:String) ->Bool{
        
        let number:Float? = Float(persen)
        
        if (number == nil || number == 0){
            return false
        }
        
        let persenNumber:NSString = persen as NSString
        
        let persenGrades:[String] = persenNumber.components(separatedBy: ".")
        var points:Int = 0;
        var lastNumber = 0;
        var i = 0;
        for persen:String in persenGrades {
            
            points = points + persen.lengthOfBytes(using: String.Encoding.utf8)
            
            if (i == 1){
                lastNumber = persen.lengthOfBytes(using: String.Encoding.utf8)
            }
            
            i = i + 1;
        }
        
        var state = false
        
        let remainder = UInt32(powf(10, Float(points)))
        let lastRemainder = UInt32(powf(10, Float(lastNumber)))
        let randomNumber:Int = Int(arc4random() % remainder) + 1
        
        if (randomNumber <= Int(number! * Float(lastRemainder))){
            state = true
        }
        else{
            state = false
        }
        
        return state
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值