这篇文章讲了什么
讲了我对小黄车公司的七夕集卡活动的不满意,因为我集了那么久都没有集到那个二八车卡,之后我就自己在分析关于这个的一些事情,后来自己实现了一个类似的坑爹的随机模型。
代码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的区间分布。
**记笔记:最重要的知识点就是如何实现非等概率分布“