找回密码
 欢迎注册
查看: 60289|回复: 31

[原创] 群体狂乱全部死亡的概率是多少?

[复制链接]
发表于 2019-1-10 14:41:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
玩过《炉石传说》的可能好理解了。有这张卡牌,叫做群体狂乱,施用后,场上的$7$个随从,$1//1, 2//2,3//3, 4//4,5//5,6//6,7//7$将随机的互相攻击,直到剩下最后一个或者0个随从。问,场上随从全部都死亡的概率是多少?
1616483491.jpg

简单说明:
1)一个随从的身材$n//m$,的意思就是说他的攻击力是$n$,体力值是$m$。
2)当一个随从$n//m$与另一个随从$x//y$战斗的时候,战斗结束后,二者各自的体力值分别是$m-x, y-n$,攻击力保持不变,即$n//m$变成了$n//(m-x)$,$x//y$变成了$x//(y-n)$。 当某随从体力值小于等于$0$的时候,立刻死亡。
3) 卡牌施用的时候,电脑将重复操作多次,每次随机挑选场上一名幸存的随从,攻击其他幸存的随从,死亡的随从将消失,不再投入战斗,直到场上幸存的随从个数小于2个。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2019-1-10 16:17:08 | 显示全部楼层
不玩炉石,第三点里面,“每次随机挑选场上一名幸存的随从,随机攻击其他幸存的随从,直到场上幸存的随从个数小于2个”可否理解为:随机选两名幸存的随从,二者战斗,结束后重新随机选两名幸存的随从战斗,直到场上幸存的随从个数小于2个?

点评

是的。应该是等价的  发表于 2019-1-10 16:35
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2019-1-10 16:56:52 | 显示全部楼层
计算结果是幸存一个人的概率是1/56700
如果总共只有2,3,4,5,6人,对应概率分别为1,1/3,1/18,1/180,1/2700
这是一个总状态数不超过8!的题目,穷举即可

点评

是的,体力值0就代表死亡,我也是这样描述的  发表于 2019-1-10 18:28
我在题目中更新了体力值得描述,原先的描述不严谨,抱歉。  发表于 2019-1-10 17:49
体力值要求大于0才能参与战斗,为0就死亡了  发表于 2019-1-10 17:43
每个选手攻击力不变,所以可能状态决定于其体力,第k个人体力可以取0,1,...,k共k+1种情况,所以所有7人体力取值的组合有(1+1)(2+1)...(7+1)=8!种  发表于 2019-1-10 17:40
没太懂  发表于 2019-1-10 17:10
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2019-1-10 17:11:47 | 显示全部楼层
我自己写了个程序。穷举了下。
解释一下: 每一次战斗至少有一个随从死亡。原则上是攻击力小的随从必然死亡,攻击力大的随从有可能死亡。所以可以是7的全排列,根据路径挨个计算。

  1. n = 7; Length[
  2. Select[Table[{i,
  3.     NestWhile[
  4.      If[#[[1, 1]] ==
  5.         0, {{Max[#[[2, 1 ;; 2]]],
  6.          Abs[First[Differences[#[[2, 1 ;; 2]]]]]}, #[[2, 3 ;; -1]]},
  7.        If[#[[1, 1]] > #[[2, 1]],
  8.         If[#[[1, 2]] > #[[2,
  9.             1]], {{#[[1, 1]], #[[1, 2]] - #[[2, 1]]}, #[[2,
  10.             2 ;; -1]]}, {{0,
  11.            0}, #[[2, 2 ;; -1]]}], {{#[[2,
  12.             1]], #[[2, 1]] - #[[1, 1]]}, #[[2, 2 ;; -1]]}]] &, {{0,
  13.        0}, i}, ((#[[1, 1]] == 0 &&
  14.           Length[#[[2]]] > 1) || (#[[1, 1]] > 0 &&
  15.           Length[#[[2]]] > 0)) &]}, {i, Permutations[Range[n]]}],
  16.   Length[#[[2, 2]]] == 0 &]]
复制代码


$n$个随从都被全部消灭,对应的概率如下:
  1. {3,6,1,1.}
  2. {4,12,1/2,0.5}
  3. {5,72,3/5,0.6}
  4. {6,624,13/15,0.866667}
  5. {7,4152,173/210,0.82381}
  6. {8,27172,6793/10080,0.673909}
  7. {9,250052,62513/90720,0.689076}
  8. {10,2839552,11092/14175,0.782504}
复制代码


毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2019-1-10 17:17:08 来自手机 | 显示全部楼层
看来我的理解和你不同,你是不是每次攻击结束,没死的人体力自动恢复?这样状态可以更少。我以为每次体力不恢复

点评

是这样理解的  发表于 2019-1-10 17:23
没死的人 体力没有恢复。参与下一次战斗  发表于 2019-1-10 17:22
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2019-1-10 17:24:06 来自手机 | 显示全部楼层
体力自动恢复肯定不对,因为最高体力者不死。查看三人情况,只有第一轮体力小的两人先对杀,三号选手才幸存,所以概率为1/3
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2019-1-11 07:38:19 | 显示全部楼层
  1. #include <gmpxx.h>
  2. #include <iostream>
  3. #include <stdio.h>
  4. #define MAXN 9
  5. #define DS   3628800  /*10!*/
  6. //v[]代表各人余下的体力值
  7. //index2vec和vec2index在体力值分布和唯一编号之间转化
  8. //由于第一个选手体力值只有0和1两种,第二个有0,1,2三种等等,所以可以使用
  9. //v[0]+2*(v[1]+3*(v[2]+...))里转化为一个紧凑的编号,使得不同的编号对应的体力值分布各不相同
  10. void index2vec(int ind, char v[MAXN])
  11. {
  12.     int i;
  13.     for(i=0;i<MAXN;i++){
  14.         v[i]=ind%(i+2);
  15.         ind/=i+2;
  16.     }
  17. }

  18. int vec2index(const char v[MAXN])
  19. {
  20.     int r=0;
  21.     int i;
  22.     for(i=MAXN-1;i>=0;i--){
  23.        r*=(i+2);
  24.        r+=v[i];
  25.     }
  26.     return r;
  27. }

  28. mpq_class data[DS];//data[i]保存标号为i的体力值分布下最终会余下一个人的概率,用分数表示

  29. //这个函数计算编号为index的体力值分布最终会余下一个人的概率并且设置data[index]
  30. //这个函数假设对于所有i<index,data[index]已经计算出
  31. void set_data(int index)
  32. {
  33.     char v[MAXN];
  34.     int i,j;
  35.     int c=0;
  36.     index2vec(index, v);
  37.     for(i=0;i<MAXN;i++)if(v[i]>0)c++;
  38.     if(c==0){
  39.         mpq_class r(0);
  40.         data[index]=r;
  41.         return;
  42.     }
  43.     if(c==1){
  44.         mpq_class r(1);
  45.         data[index]=r;
  46.         return;
  47.     }
  48.     c=0;
  49.     mpq_class r(0);
  50.     for(i=0;i<MAXN;i++)for(j=i+1;j<MAXN;j++){
  51.        if(v[i]>0&&v[j]>0){
  52.           c++;
  53.           { //第i和第j个选手对攻的情况,需要注意第i个选手攻击力是i+1,而第j个选手的攻击力大于第i个选手的体力,所以第i个选手必然灭亡
  54.               int old_vi=v[i],old_vj=v[j];v[i]=0;
  55.               v[j]-=i+1;if(v[j]<0)v[j]=0;
  56.               int new_index = vec2index(v);//计算相互攻击后的编号
  57.               r+=data[new_index];//求各种攻击后状态的概率和
  58.               v[j]=old_vj;v[i]=old_vi;//恢复状态
  59.           }
  60.        }
  61.     }
  62.     if(c==0){
  63.        std::cerr<<"Invalid\n";
  64.        exit(-1);
  65.     }
  66.     r/=c;//求概率的平均
  67.     data[index]=r;
  68. }

  69. void output_index(int index)
  70. {
  71.     char v[MAXN];
  72.     int i;
  73.     int first=1;
  74.     index2vec(index,v);
  75.     std::cout<<'[';
  76.     for(i=0;i<MAXN;i++){
  77.         if(v[i]!=0){
  78.             if(first){ first = 0;}
  79.             else std::cout<<' ';
  80.             std::cout<<(int)v[i]<<'/'<<i+1;
  81.         }
  82.     }
  83.     std::cout<<"]==>"<<data[index]<<'\n';
  84. }

  85. int main()
  86. {
  87.     int i;
  88.     int curds=1, nextm=2;
  89.     for(i=0;i<DS;i++){
  90.        set_data(i);
  91.        if(i==curds-1){
  92.            output_index(i);
  93.            curds*=nextm;nextm+=1;
  94.        }
  95.     }
  96.     return 0;
  97. }
复制代码

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2019-1-11 07:57:55 | 显示全部楼层
d[1/1 2/2 3/3]=1/3
d[1/1 2/2 3/4]=1/3
d[1/1 1/2 4/4]=2/3
d[1/1 2/2 4/4]=1
d[1/1 2/3 4/4]=1/3
d[1/1 3/3 4/4]=1/3
d[1/2 3/3 4/4]=1/3
d[2/2 3/3 4/4]=1/3
d[1/1 2/2 3/3 4/4]=1/18
d[1/1 2/2 3/5]=1/3
d[1/1 1/2 4/5]=2/3
d[1/1 2/2 4/5]=1
d[1/1 2/3 4/5]=1/3
d[1/1 3/3 4/5]=1/3
d[1/2 3/3 4/5]=1/3
d[2/2 3/3 4/5]=1/3
d[1/1 2/2 3/3 4/5]=1/18
d[1/1 1/2 5/5]=2/3
d[1/1 2/2 5/5]=1
d[1/1 1/3 5/5]=2/3
d[1/1 2/3 5/5]=1
d[1/1 3/3 5/5]=1
d[1/2 3/3 5/5]=1/3
d[1/1 1/2 3/3 5/5]=1/6
d[2/2 3/3 5/5]=1/3
d[1/1 2/2 3/3 5/5]=2/9
d[1/1 2/4 5/5]=1/3
d[1/1 3/4 5/5]=1/3
d[1/2 3/4 5/5]=1/3
d[2/2 3/4 5/5]=1/3
d[1/1 2/2 3/4 5/5]=1/18
d[1/1 4/4 5/5]=1/3
d[1/2 4/4 5/5]=1/3
d[1/1 1/2 4/4 5/5]=1/9
d[2/2 4/4 5/5]=1/3
d[1/1 2/2 4/4 5/5]=1/6
d[1/3 4/4 5/5]=1/3
d[2/3 4/4 5/5]=1/3
d[1/1 2/3 4/4 5/5]=1/18
d[3/3 4/4 5/5]=1/3
d[1/1 3/3 4/4 5/5]=1/18
d[1/2 3/3 4/4 5/5]=1/18
d[2/2 3/3 4/4 5/5]=1/18
d[1/1 2/2 3/3 4/4 5/5]=1/180
d[1/1 2/2 3/6]=1/3
d[1/1 1/2 4/6]=2/3
d[1/1 2/2 4/6]=1
d[1/1 2/3 4/6]=1/3
d[1/1 3/3 4/6]=1/3
d[1/2 3/3 4/6]=1/3
d[2/2 3/3 4/6]=1/3
d[1/1 2/2 3/3 4/6]=1/18
d[1/1 1/2 5/6]=2/3
d[1/1 2/2 5/6]=1
d[1/1 1/3 5/6]=2/3
d[1/1 2/3 5/6]=1
d[1/1 3/3 5/6]=1
d[1/2 3/3 5/6]=1/3
d[1/1 1/2 3/3 5/6]=1/6
d[2/2 3/3 5/6]=1/3
d[1/1 2/2 3/3 5/6]=2/9
d[1/1 2/4 5/6]=1/3
d[1/1 3/4 5/6]=1/3
d[1/2 3/4 5/6]=1/3
d[2/2 3/4 5/6]=1/3
d[1/1 2/2 3/4 5/6]=1/18
d[1/1 4/4 5/6]=1/3
d[1/2 4/4 5/6]=1/3
d[1/1 1/2 4/4 5/6]=1/9
d[2/2 4/4 5/6]=1/3
d[1/1 2/2 4/4 5/6]=1/6
d[1/3 4/4 5/6]=1/3
d[2/3 4/4 5/6]=1/3
d[1/1 2/3 4/4 5/6]=1/18
d[3/3 4/4 5/6]=1/3
d[1/1 3/3 4/4 5/6]=1/18
d[1/2 3/3 4/4 5/6]=1/18
d[2/2 3/3 4/4 5/6]=1/18
d[1/1 2/2 3/3 4/4 5/6]=1/180
d[1/1 1/2 6/6]=2/3
d[1/1 2/2 6/6]=1
d[1/1 1/3 6/6]=2/3
d[1/2 1/3 6/6]=2/3
d[2/2 1/3 6/6]=2/3
d[1/1 2/2 1/3 6/6]=1/6
.......
d[1/2 3/3 4/5 6/6 7/7 8/8 9/9]=1/56700
d[2/2 3/3 4/5 6/6 7/7 8/8 9/9]=1/56700
d[1/1 2/2 3/3 4/5 6/6 7/7 8/8 9/9]=1/1587600
d[5/5 6/6 7/7 8/8 9/9]=1/180
d[1/1 5/5 6/6 7/7 8/8 9/9]=1/2700
d[1/2 5/5 6/6 7/7 8/8 9/9]=1/2700
d[1/1 1/2 5/5 6/6 7/7 8/8 9/9]=1/28350
d[2/2 5/5 6/6 7/7 8/8 9/9]=1/2700
d[1/1 2/2 5/5 6/6 7/7 8/8 9/9]=1/18900
d[1/3 5/5 6/6 7/7 8/8 9/9]=1/2700
d[1/1 1/3 5/5 6/6 7/7 8/8 9/9]=1/28350
d[2/3 5/5 6/6 7/7 8/8 9/9]=1/2700
d[1/1 2/3 5/5 6/6 7/7 8/8 9/9]=1/18900
d[3/3 5/5 6/6 7/7 8/8 9/9]=1/2700
d[1/1 3/3 5/5 6/6 7/7 8/8 9/9]=1/18900
d[1/2 3/3 5/5 6/6 7/7 8/8 9/9]=1/56700
d[1/1 1/2 3/3 5/5 6/6 7/7 8/8 9/9]=1/529200
d[2/2 3/3 5/5 6/6 7/7 8/8 9/9]=1/56700
d[1/1 2/2 3/3 5/5 6/6 7/7 8/8 9/9]=1/396900
d[1/4 5/5 6/6 7/7 8/8 9/9]=1/2700
d[2/4 5/5 6/6 7/7 8/8 9/9]=1/2700
d[1/1 2/4 5/5 6/6 7/7 8/8 9/9]=1/56700
d[3/4 5/5 6/6 7/7 8/8 9/9]=1/2700
d[1/1 3/4 5/5 6/6 7/7 8/8 9/9]=1/56700
d[1/2 3/4 5/5 6/6 7/7 8/8 9/9]=1/56700
d[2/2 3/4 5/5 6/6 7/7 8/8 9/9]=1/56700
d[1/1 2/2 3/4 5/5 6/6 7/7 8/8 9/9]=1/1587600
d[4/4 5/5 6/6 7/7 8/8 9/9]=1/2700
d[1/1 4/4 5/5 6/6 7/7 8/8 9/9]=1/56700
d[1/2 4/4 5/5 6/6 7/7 8/8 9/9]=1/56700
d[1/1 1/2 4/4 5/5 6/6 7/7 8/8 9/9]=1/793800
d[2/2 4/4 5/5 6/6 7/7 8/8 9/9]=1/56700
d[1/1 2/2 4/4 5/5 6/6 7/7 8/8 9/9]=1/529200
d[1/3 4/4 5/5 6/6 7/7 8/8 9/9]=1/56700
d[2/3 4/4 5/5 6/6 7/7 8/8 9/9]=1/56700
d[1/1 2/3 4/4 5/5 6/6 7/7 8/8 9/9]=1/1587600
d[3/3 4/4 5/5 6/6 7/7 8/8 9/9]=1/56700
d[1/1 3/3 4/4 5/5 6/6 7/7 8/8 9/9]=1/1587600
d[1/2 3/3 4/4 5/5 6/6 7/7 8/8 9/9]=1/1587600
d[2/2 3/3 4/4 5/5 6/6 7/7 8/8 9/9]=1/1587600
d[1/1 2/2 3/3 4/4 5/5 6/6 7/7 8/8 9/9]=1/57153600
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2019-1-11 11:03:39 | 显示全部楼层
前面计算的确不会,判断过程中遗漏了关键的同归于尽的中间过程
更新以后结果如下
d[]=0
d[1/1]=1
d[1/1 2/2]=1
d[1/1 2/2 3/3]=1/3
d[1/1 2/2 3/3 4/4]=5/18
d[1/1 2/2 3/3 4/4 5/5]=14/45
d[1/1 2/2 3/3 4/4 5/5 6/6]=23/100
d[1/1 2/2 3/3 4/4 5/5 6/6 7/7]=563/5670
d[1/1 2/2 3/3 4/4 5/5 6/6 7/7 8/8]=34933/793800
d[1/1 2/2 3/3 4/4 5/5 6/6 7/7 8/8 9/9]=56059/2116800
d[1/1 2/2 3/3 4/4 5/5 6/6 7/7 8/8 9/9 10/10]=3888637/285768000
代码只需要将set_data中 if(v[j]>i+1)改为if(v[j]>=i+1)
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2019-1-11 19:14:49 | 显示全部楼层
mathe可否打印出有效的完整的战斗匹配的路径出来。
我发现我前面4#的计算有误。忽略了一种情况,就是每次战斗后,受伤的角色不一定在下一轮必然选上加入战斗。所以,实际上样本空间是$C_n^2C_{n-1}^2C_{n-2}^2C_{n-3}^2...$,考虑同归于尽的场合,最终的事件空间略小于这个数目。
  1. {3,2,3,2/3}
  2. {4,11,18,11/18}
  3. {5,57,152,3/8}
  4. {6,394,1696,197/848}
  5. {7,6090,24068,3045/12034}
  6. {8,151555,433660,30311/86732}
  7. {9,4105581,9691096,4105581/9691096}
复制代码


比如$n=8$的情况,我随便挑选了$20$组。
比如这种情况${{{2,2}},{{{7,7},{8,8}},{{1,1},{4,4}},{{5,5},{6,6}},{{4,3},{8,1}},{{3,3},{6,1}}}}$ ,最终幸存的是$2$号,体力值为$2$, 经历了$5$轮战斗,$(7,8), (1,4),(5,6),(4,8),(3,6)$
比如这种情况${{{5, 4}}, {{{2, 2}, {3, 3}}, {{3, 1}, {6, 6}}, {{6, 3}, {8, 8}}, {{4, 4}, {7, 7}}, {{7, 3}, {8, 2}}, {{1, 1}, {5, 5}}}}$ , 最终幸存的是$5$号,体力值为$4$, 经历了$6$轮战斗,$(2,3), (3,6),(6,8),(4,7),(7,8),(1,5)$
比如这种情况${{{8,1}},{{{1,1},{2,2}},{{2,1},{3,3}},{{3,1},{4,4}},{{4,1},{5,5}},{{5,1},{6,6}},{{6,1},{7,7}},{{7,1},{8,8}}}}$ ,最终幸存的是$8$号,体力值为$1$, 经历了$7$轮战斗,$(1,2), (2,3),(3,4),(4,5),(5,6),(6,7),(7,8)$
比如这种情况${{},{{{3,3},{5,5}},{{2,2},{4,4}},{{4,2},{6,6}},{{7,7},{8,8}},{{5,2},{6,2}},{{1,1},{8,1}}}}$ , 最终无人幸存, 经历了$6$轮战斗,$(3,5), (2,4),(4,6),(7,8),(5,6),(1,8)$

  1. {{{2,2}},{{{7,7},{8,8}},{{1,1},{4,4}},{{5,5},{6,6}},{{4,3},{8,1}},{{3,3},{6,1}}}}
  2. {{{5,4}},{{{2,2},{3,3}},{{3,1},{6,6}},{{6,3},{8,8}},{{4,4},{7,7}},{{7,3},{8,2}},{{1,1},{5,5}}}}
  3. {{{8,1}},{{{1,1},{2,2}},{{2,1},{3,3}},{{3,1},{4,4}},{{4,1},{5,5}},{{5,1},{6,6}},{{6,1},{7,7}},{{7,1},{8,8}}}}
  4. {{{7,3}},{{{1,1},{2,2}},{{6,6},{8,8}},{{2,1},{5,5}},{{3,3},{4,4}},{{4,1},{7,7}},{{5,3},{8,2}}}}
  5. {{{6,3}},{{{3,3},{6,6}},{{1,1},{4,4}},{{4,3},{2,2}},{{4,1},{5,5}},{{7,7},{8,8}},{{8,1},{5,1}}}}
  6. {{},{{{3,3},{5,5}},{{2,2},{4,4}},{{4,2},{6,6}},{{7,7},{8,8}},{{5,2},{6,2}},{{1,1},{8,1}}}}
  7. {{},{{{1,1},{6,6}},{{2,2},{5,5}},{{7,7},{8,8}},{{8,1},{5,3}},{{4,4},{6,5}},{{6,1},{3,3}}}}
  8. {{{5,5}},{{{6,6},{7,7}},{{1,1},{2,2}},{{3,3},{8,8}},{{2,1},{4,4}},{{4,2},{8,5}},{{8,1},{7,1}}}}
  9. {{{5,1}},{{{4,4},{8,8}},{{8,4},{2,2}},{{3,3},{5,5}},{{6,6},{7,7}},{{1,1},{5,2}},{{7,1},{8,2}}}}
  10. {{{7,4}},{{{4,4},{6,6}},{{1,1},{8,8}},{{2,2},{3,3}},{{6,2},{8,7}},{{3,1},{7,7}},{{5,5},{8,1}}}}
  11. {{},{{{5,5},{6,6}},{{1,1},{8,8}},{{8,7},{3,3}},{{2,2},{4,4}},{{4,2},{6,1}},{{7,7},{8,4}}}}
  12. {{},{{{1,1},{4,4}},{{3,3},{8,8}},{{4,3},{7,7}},{{5,5},{6,6}},{{6,1},{2,2}},{{7,3},{8,5}}}}
  13. {{{7,1}},{{{4,4},{5,5}},{{1,1},{2,2}},{{6,6},{7,7}},{{2,1},{8,8}},{{8,6},{3,3}},{{8,3},{5,1}}}}
  14. {{{8,2}},{{{3,3},{5,5}},{{1,1},{2,2}},{{5,2},{7,7}},{{2,1},{6,6}},{{4,4},{7,2}},{{6,4},{8,8}}}}
  15. {{{5,5}},{{{1,1},{8,8}},{{4,4},{6,6}},{{3,3},{7,7}},{{6,2},{8,7}},{{2,2},{7,4}},{{7,2},{8,1}}}}
  16. {{{6,1}},{{{1,1},{4,4}},{{4,3},{8,8}},{{3,3},{7,7}},{{5,5},{6,6}},{{2,2},{8,4}},{{8,2},{7,4}}}}
  17. {{},{{{2,2},{8,8}},{{1,1},{7,7}},{{5,5},{8,6}},{{8,1},{3,3}},{{4,4},{6,6}},{{6,2},{7,6}}}}
  18. {{{6,1}},{{{1,1},{5,5}},{{2,2},{6,6}},{{6,4},{3,3}},{{5,4},{7,7}},{{4,4},{8,8}},{{8,4},{7,2}}}}
  19. {{},{{{5,5},{7,7}},{{1,1},{4,4}},{{3,3},{8,8}},{{2,2},{6,6}},{{7,2},{8,5}},{{4,3},{6,4}}}}
  20. {{{7,3}},{{{5,5},{8,8}},{{2,2},{6,6}},{{6,4},{8,3}},{{1,1},{3,3}},{{3,2},{4,4}},{{4,1},{7,7}}}}
复制代码


附上我的代码:
  1. fight[pair0_] :=
  2. Module[{pair = pair0},
  3.   Select[{{pair[[1, 1]], pair[[1, 2]] - pair[[2, 1]]}, {pair[[2, 1]],
  4.      pair[[2, 2]] - pair[[1, 1]]}}, #[[2]] > 0 &]
  5.   ]

  6. sss = Table[{n, data = {{{#, #} & /@ Range[n], {}}};
  7.    Do[data =
  8.      Flatten[Table[
  9.        If[Length[round[[1]]] > 1,
  10.         Table[{Join[fight[i], Complement[round[[1]], i]],
  11.           Join[round[[2]], {i}]}, {i,
  12.           Subsets[round[[1]], {2}]}], {round}], {round, data}],
  13.       1], {n - 1}]; t = Select[data, Length[#[[1]]] == 0 &];
  14.    Length[t], Length[data], Length[t]/Length[data], data}, {n, 1, 7}]
复制代码


毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-11-23 20:26 , Processed in 0.032200 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表