山东大学吧 关注:443,946贴子:10,781,573

【讨论帖】关于支付宝集福最终分到钱的数量的概率问题。

只看楼主收藏回复

这个问题的关键有2。第一,阿里金钱随机分配的算法。第二,每个集齐五福的人,分到的钱大于某个数的概率。我想了一两天,目前我觉得最合理的模型是:
由于精确度只能到分,因此我们可以把金钱离散化,2亿可以看作200亿个一分钱。假设有n个人集齐,那么就相当于200亿个球,随机投入n个盒子中。这样每个盒子里球的个数应该就服从二项分布了。可是这有一个困难:算不出来。于是我用泊松近似一下,发现这种模型里面往往会导致泊松分布的参数很大,表上查不到。。。
于是各位数学大神,讨论讨论,不知有什么更好更简便的模型或者算法没


IP属地:陕西来自Android客户端1楼2017-01-21 00:02回复
    d


    星座王
    点亮12星座印记,去领取
    活动截止:2100-01-01
    去徽章馆》
    IP属地:广东来自Android客户端4楼2017-01-21 00:09
    回复
      不是说数字越大越接近正态么


      IP属地:河北来自Android客户端5楼2017-01-21 00:15
      收起回复


        来自Android客户端6楼2017-01-21 00:19
        回复
          讨论这个是找不到女朋友的!


          IP属地:江苏来自Android客户端8楼2017-01-21 00:27
          收起回复
            产生N个符合正态分布的随机数,使随机数的和等于两个亿


            来自iPad9楼2017-01-21 01:09
            回复
              手痒写了段代码简单实现一下,没调试,不一定能运行
              0️⃣1️⃣2️⃣3️⃣4️⃣5️⃣6️⃣7️⃣8️⃣9️⃣🔟🔠🔡🔣
              #include<studio.h>
              #define N 1000
              #define MONEY 10000
              {
              int i, seed, sum, count, bonus[N];
              double rate;
              sum = 0;
              count = 0;
              seed = time(0);
              for(i = 0; i < N; i++)
              {
              bonus[i] = rand(seed)%(int)(MONEY/N);
              sum += bonus[i];
              }
              rate = MONEY / (1.0 * sum);
              for(i = 0; i < N; i++)
              {
              bonus[i] = rate * bonus[i];
              printf("%6.2lf\t",bonus[i];
              count++;
              if (count % 50 == 0)
              {
              printf("\n");
              }
              }
              return 0;
              }


              来自iPhone客户端10楼2017-01-21 02:04
              收起回复


                来自iPhone客户端11楼2017-01-21 02:05
                回复
                  爪机写代码真累


                  来自iPhone客户端12楼2017-01-21 02:05
                  回复


                    IP属地:江苏来自Android客户端16楼2017-01-21 04:57
                    回复
                      厉害啊!


                      来自Android客户端17楼2017-01-21 08:41
                      回复


                        来自Android客户端18楼2017-01-21 09:12
                        收起回复
                          #include <stdio.h>
                          #include <time.h>
                          #define N 1000
                          #define MONEY 10000
                          int main(){
                          int i, sum, count, bonus[N];
                          time_t seed;
                          double rate;
                          sum = 0;
                          count = 0;
                          seed = time(0);
                          for(i = 0; i < N; i++)
                          {
                          bonus[i] = rand(seed)%(int)(MONEY/N);
                          sum += bonus[i];
                          }
                          rate = MONEY / (1.0 * sum);
                          for(i = 0; i < N; i++)
                          {
                          bonus[i] = rate * bonus[i];
                          printf("%6.2lf\t",bonus[i]);
                          count++;
                          if (count % 50 == 0)
                          {
                          printf("\n");
                          }
                          }
                          return 0;
                          }
                          这个可以跑,改了几个写错的地方。。,学渣表示并不知道跑的是什么东西


                          IP属地:江苏来自手机贴吧23楼2017-01-21 10:32
                          收起回复
                            看不懂


                            来自Android客户端25楼2017-01-21 10:48
                            回复