游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1673|回复: 0

[求助] 悬赏一个统计问题答案!

[复制链接]

8

主题

48

帖子

233

积分

中级会员

Rank: 3Rank: 3

积分
233
发表于 2018-5-11 17:18:47 | 显示全部楼层 |阅读模式
问题:
1~m个不同的数,从中有放回重复抽取n次,问:在抽取的n次结果中,有多少组数是出现x次的?例如从一个数1中抽5次,则有1组数出现了5次。

问题来源:
m个士兵与n个士兵混战,独立各自锁敌,血攻比为x,求一回合能击杀多少人?

相关matlab模拟分享:
  1. model_m=[300,50];
  2. model_n=[100,50];%模型【血量,攻击】
  3. m=5340;%m人数
  4. n=10000;%n人数
  5. t=clock;
  6. M=[[1:m]',repmat(model_m,m,1),randi(n,m,1)];%id 血量 攻击 锁敌目标id
  7. N=[[1:n]',repmat(model_n,n,1),randi(m,n,1)];%id 血量 攻击 锁敌目标id
  8. x=0;
  9. while sum(M(:,2))>0&&sum(N(:,2))>0
  10.     N(unique(M(:,4)),2)=N(unique(M(:,4)),2)-histc(M(:,4),unique(M(:,4)))*model_m(2);%m攻击n
  11.     M(unique(N(:,4)),2)=M(unique(N(:,4)),2)-histc(N(:,4),unique(N(:,4)))*model_n(2);%n攻击m
  12.     live_n=N(:,2)>0;
  13.     live_m=M(:,2)>0;
  14.     suodi_m=ismember(M(:,4),N(live_n,1));
  15.     suodi_n=ismember(N(:,4),M(live_m,1));
  16.     l_n=cumsum(~live_n);%n的累积战败数量
  17.     l_m=cumsum(~live_m);
  18.     M(live_m&suodi_m,4)=M(live_m&suodi_m,4)-l_n(M(live_m&suodi_m,4));
  19.     N(live_n&suodi_n,4)=N(live_n&suodi_n,4)-l_m(N(live_n&suodi_n,4));
  20.     if sum(live_m&~suodi_m)>0&&sum(live_n)>0
  21.         M(live_m&~suodi_m,4)=randi(sum(live_n),sum(live_m&~suodi_m),1);%目标战败重新锁敌
  22.     end
  23.     if sum(live_n&~suodi_n)>0&&sum(live_m)>0
  24.         N(live_n&~suodi_n,4)=randi(sum(live_m),sum(live_n&~suodi_n),1);%目标战败重新锁敌
  25.     end
  26.     M=M(live_m,:);%清除战败单位
  27.     N=N(live_n,:);%清除战败单位
  28.     x=x+1;
  29. end
  30. Mshengyu=size(M,1)
  31. Nshengyu=size(N,1)
  32. clock-t
  33. x
复制代码


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-20 04:23

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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