由小黄车的七夕集卡来谈随机算法及相关实现

60 篇文章 2 订阅

这篇文章讲了什么

讲了我对小黄车公司的七夕集卡活动的不满意,因为我集了那么久都没有集到那个二八车卡,之后我就自己在分析关于这个的一些事情,后来自己实现了一个类似的坑爹的随机模型。

代码1

先来看小黄车的集卡活动,小黄车集卡活动其他的四张卡都是非常好集的,简直不要太简单了。。。然后就是那个二八车非常难以集到,估计小黄车的数量要上千万辆吧,但是集齐的只有不到30万人,这个比例大概是几十比一的比例。

于是我就自己想了一个模型出来,用户每次去骑车都给他分配一张卡片。
我假设是两张卡片(小黄车卡与二八车卡)。然后100次中有5次是二八车卡,而小黄车卡是95次。

于是就得到了下面的代码(用rand实现随机)

#include  <iostream>
#include  <string>
#include <map>
#include <fstream>
#include <stdlib.h>
#include <time.h>  
using namespace std;
int main()
{
    int a = 0, b = 0,count=1;  //a代表小黄车数量,b代表二八车数量
    srand((unsigned)time(NULL));
    while (1){
        if (rand()%2){
            if (a < 95){
                cout << count++<< "小黄车"<<endl;
                a++;
            }
        }
        else{
            if (b < 5){
                cout << count++<<"二八车"<<endl;
                b++;
            }
        }
    }
    cout << "a:" << a << "------------------" << "b:" << b << endl;
    system("pause");
    return 0;
}

大概就是这个样子的
这里写图片描述

这是一种伪随机,因为每次发放小黄车跟二八车的概率是一样的,所以我这里用了一个改进版本,只需要让每次发放二八车跟小黄车的概率不一样就可以了!!!

改进的版本如下:

#include  <iostream>
#include  <string>
#include <map>
#include <fstream>
#include <stdlib.h>
#include <time.h>  
using namespace std;
int main()
{
    int a = 0, b = 0,count=1;  //a代表小黄车数量,b代表二八车数量
    srand((unsigned)time(NULL));
    while (1){
        int temp = rand() % 100;
        if (temp>=0 &&temp<95 ){
            if (a < 95){
                cout << count++<< "小黄车"<<endl;
                a++;
            }
        }
        else{
            if (b < 5){
                cout << count++<<"二八车"<<endl;
                b++;
            }
        }
    }
    cout << "a:" << a << "------------------" << "b:" << b << endl;
    system("pause");
    return 0;
}

这里写图片描述
改进的版本很明显的能够感受到二八车的分布不再是靠前了,而是真正的等概率在1-100的区间分布。

**记笔记:最重要的知识点就是如何实现非等概率分布“

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值