ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 静听溪流

[讨论] 【函数小题】随机生成6个50-100之间的整数且总合计为400

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-9-1 23:53 | 显示全部楼层
参与一下
  1. =LET(f,LAMBDA(x,IF(SUM(x)=400,x,f(RANDARRAY(6,,50,100,1)))),f(0))
复制代码

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-9-2 10:26 | 显示全部楼层
leepoison 发表于 2024-8-29 14:58
=LAMBDA(x,LET(aaa,LAMBDA(x,LET(y,RANDARRAY(6,,50,100,1),IF(SUM(y)=x,y,aaa(x)))),aaa(x)))(400)

其实这才是真随机,好几个都是假随机,直接设置了400/6=67的上限,不是真正的50-100的随机。

TA的精华主题

TA的得分主题

发表于 2024-9-2 10:54 | 显示全部楼层
edwin11891 发表于 2024-8-29 12:43
可行,但是公式长啊

不知道是要看字段长度,不然还能精简

TA的精华主题

TA的得分主题

发表于 2024-9-2 11:20 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-9-2 20:26 | 显示全部楼层
世界客都 发表于 2024-9-1 22:19
静版的公式,我用WPS发现得不出结果
是在A1:A6下拉的吗?
请静版给出WPS的公式并顺便讲解一下思路,谢谢 ...

WPS得不出结果是因为WPS中RANDBETWEEN(Z1:Z300+1,9)这种写法只能返回300个相同的随机数导致的,换成RANDBETWEEN(ROW(1:300)^0,9)写法即可
=MMULT(N(MOD(SMALL(RANDBETWEEN(ROW(1:300)^0,RANDBETWEEN(1,99))*10^3+ROW(1:300),ROW()*50-50+COLUMN(A:AX)),10^3)<101),Z1:Z50+1)+50
思路:
因为题目限制6个数最小为50,最大100,总合计400。所以我们假设这6个数的基础数据为50,总合计也就300,剩下的100,需要随机分配给这6个50,且分配的数据不得超过50
我们假设有1-300的300个数据,我们随机将这300个数随机分布到6*50的6行50列的数组中,这样我们只需要统计每行有几个小于等于100的数有几个,从而确定该行对应的50需要加几,假设第一行随机的<=100的数有30个,那么该行对应的随机数就等于基础数据50+30=80,以此类推,可以得到其余5个随机数,因为6行数据中所有<=100的数据只有100个,所以最终6个随机数总合计肯定=400,又因为只有50列,所以每行最大的随机数只能是基础数据50+该行50个都<=100的个数50=100,也不会超过上限100,或者每行最小的随机数只能是基础数据50+该行50个都>100的个数0=50,不低于下限50

因为小于101的那100个数是随机出现的,所以理论上该公式是可以随机出全部的组合的。


评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-9-2 21:08 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
静听溪流 发表于 2024-9-2 20:26
WPS得不出结果是因为WPS中RANDBETWEEN(Z1:Z300+1,9)这种写法只能返回300个相同的随机数导致的,换成RANDB ...

谢谢老师指示

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-9-2 21:14 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

也感谢你让我发现了randbetween这么奇怪的特性

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-9-2 21:16 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
呃,最后我能不能说几句,希望大家包括静版也不要生气:
第一:我看了一下大家的无论是低版本还是365的公式
循环、递归写法非常简便,但是,只是针对简单的情况
稍微难点的,比如:随机产生3个大于等于0的整数,使之分别乘以200,500,800,最后求得的三个数的总和为19500。
你会发现office递归2048次,wps递归最大5000次也难以产生符合条件的数组。
第二:静版的公式不错
不知道为何,我这里对静版的公式进行随机测试,看数据分布
集中在了60-75中间,跨度并不大
我个人对随机效果的理解是:
范围内的数值都能随机到
且范围均匀,哪怕不能出现所有组合情况,也可以视为较好的一组随机数。

TA的精华主题

TA的得分主题

发表于 2024-9-2 21:36 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
静听溪流 发表于 2024-9-2 20:26
WPS得不出结果是因为WPS中RANDBETWEEN(Z1:Z300+1,9)这种写法只能返回300个相同的随机数导致的,换成RANDB ...

新公式在WPS(版本:18157×64)下仍报错,得不出结果。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-9-2 21:51 | 显示全部楼层
edwin11891 发表于 2024-9-2 21:36
新公式在WPS(版本:18157×64)下仍报错,得不出结果。

我的不是这个版本的    具体情况不太清楚    有可能也是因为randbetween函数导致
可以在理解整个公式后   将随机函数更换成RANDARRAY这个随机函数即可
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-15 15:34 , Processed in 0.045240 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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