找回密码
 立即注册
搜索
查看: 2439|回复: 14

[软件] excel能不能多匹多?

[复制链接]
     
发表于 2020-12-7 22:14 | 显示全部楼层 |阅读模式
本帖最后由 晨曦之下 于 2020-12-7 22:29 编辑

斗鱼整的活动 折腾了半天没整出来 规则是几个玩家 每人可以购买多个英雄( 英雄只会卖给一个人)
持有的英雄可以形成羁绊 羁绊人数不要求全部满足(5人羁绊 持有3个就可以激活) 不同羁绊的英雄可能重复

玩家持有的英雄(用A-Z代表英雄 )
玩家1 A B C E
玩家2 D F G H M K

羁绊需要的英雄 括号里面为最少的英雄数量 比如羁绊1有4个英雄 但是只要有3个就能激活
羁绊1 A B C D  (n>=3)  
羁绊2 C E G H  (n>=2)  
羁绊3 A K I M N (n>=4)

最终玩家能够激活的羁绊
玩家1: 羁绊1(ABC) 羁绊2(CE)
玩家2: 羁绊2(GH)


羁绊里面存在重复英雄
match+lookup只能查找到第一个羁绊
除了vba还有什么办法吗

回复

使用道具 举报

     
发表于 2020-12-7 22:20 来自手机 | 显示全部楼层
连帖子都没看懂的只有我一个嘛
回复

使用道具 举报

发表于 2020-12-7 22:29 | 显示全部楼层
给每一个羁绊设一个flag然后玩家A和B merge(union)起来看看
回复

使用道具 举报

     
 楼主| 发表于 2020-12-7 22:30 | 显示全部楼层
win8 发表于 2020-12-7 22:20
连帖子都没看懂的只有我一个嘛

讲的是不太清楚
我补了一些注释你看看能不能看懂
回复

使用道具 举报

     
 楼主| 发表于 2020-12-7 22:36 | 显示全部楼层
本帖最后由 晨曦之下 于 2020-12-7 22:54 编辑
JollytheJoker 发表于 2020-12-7 22:29
给每一个羁绊设一个flag然后玩家A和B merge(union)起来看看

感觉这个太高层了

我现在还在第一层
在思考怎么用持有的多个英雄匹配出对应的羁绊

index只能匹配出第一个满足条件的羁绊
像是玩家1这种同时持有多个羁绊就匹配不了

我现在能想出来的方案就是给每个玩家建立一个辅助表
辅助表对应羁绊来逐行匹配

=============马克一下数据==========
玩家持有的英雄(用A-Z代表英雄 )
玩家1 A B C E
玩家2 D F G H M K

羁绊需要的英雄 括号里面为最少的英雄数量 比如羁绊1有4个英雄 但是只要有3个就能激活
羁绊1 A B C D  (n>=3)  
羁绊2 C E G H  (n>=2)  
羁绊3 A K I M N (n>=4)

最终玩家能够激活的羁绊
玩家1: 羁绊1(ABC) 羁绊2(CE)
玩家2: 羁绊2(GH)

==========表格==================

羁绊条件表
羁绊英雄1英雄2英雄3英雄4英雄5条件
羁绊1ABCD3
羁绊2CEGH2
羁绊3AKIMN4



玩家1的辅助表
羁绊英雄1英雄2英雄3英雄4英雄5条件小计
羁绊11110033
羁绊2110022
羁绊31000041


辅助表最后一列加个羁绊筛选if(小计>=条件){羁绊, ''}

在总表的玩家那一列直接join(羁绊筛选)
这样算是搞完一个玩家

就是感觉很丑陋
而且每次计算量量挺大的 20个玩家 + 六十多个英雄 + 十多个羁绊

回复

使用道具 举报

发表于 2020-12-7 22:58 | 显示全部楼层
晨曦之下 发表于 2020-12-7 22:36
感觉这个太高层了

我现在还在第一层

你可以简单的拿A试下,行是英雄,三个羁绊每个对应一列,在每列列尾数下有几个满足的英雄然后判断下就行了
回复

使用道具 举报

     
 楼主| 发表于 2020-12-7 23:41 | 显示全部楼层
JollytheJoker 发表于 2020-12-7 22:58
你可以简单的拿A试下,行是英雄,三个羁绊每个对应一列,在每列列尾数下有几个满足的英雄然后判断下就行 ...

这个不太好
因为英雄是动态的 每盘结束都不一样
行要是动态增减很容易出问题
回复

使用道具 举报

头像被屏蔽
     
发表于 2020-12-8 00:01 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2020-12-8 00:10 | 显示全部楼层
晨曦之下 发表于 2020-12-7 23:41
这个不太好
因为英雄是动态的 每盘结束都不一样
行要是动态增减很容易出问题 ...

哦哦哦你这个动态的,那是不行

这需求弄个软件算比较方便,比如R,excel我是不会了
回复

使用道具 举报

     
 楼主| 发表于 2020-12-8 12:05 | 显示全部楼层
本帖最后由 晨曦之下 于 2020-12-8 19:22 编辑
whzfjk 发表于 2020-12-8 00:01
全英雄作列,每个玩家持有01向量和每个牵绊要求01向量算内积,结果超过牵绊对应的最小值就算
再加个每局英 ...

虽然感觉是很简单的 但是没看太懂

列: 英雄列表
行: 每个玩家持有01向量和每个牵绊要求01向量算内积
应该是这样吧 那要怎么计算羁绊对应的最小值

再建个表 用hlooup查找英雄名称获取积吗?

英雄没有ban选项这个倒是可以忽略

--------------------------------
搞出来了! 数学残疾好痛苦_( :з」∠)_

向量乘积用MMULT公式可以计算 MMULT(ARR1,ARR2) 可以得到arr1列数 arr2行数的矩阵
假设arr1 = 1*20 arr2 = 20*1 => 获得1*1大小的矩阵 这个值就是满足条件的数量

用match获取用户名的偏移量 用offset获取需要的行列
这样就可以


请用sumproduct+countif.............................................................
回复

使用道具 举报

发表于 2020-12-8 13:47 | 显示全部楼层
excel对付这种问题最简单粗暴的办法就是建足够的辅助列,不要想太复杂
回复

使用道具 举报

     
发表于 2020-12-8 16:56 来自手机 | 显示全部楼层

再加点判断就行

—— 来自 samsung SM-G9650, Android 10上的 S1Next-鹅版 v2.4.3
回复

使用道具 举报

     
发表于 2020-12-8 17:43 | 显示全部楼层
本帖最后由 bm7号 于 2020-12-8 17:46 编辑

微信截图_20201208172744.png
这样大概也行,上边数组大括号是ctrl+shift+enter按出来的。然后怎么把判断大小放在一个格我就不懂了。
回复

使用道具 举报

     
 楼主| 发表于 2020-12-8 19:19 | 显示全部楼层
暗铁 发表于 2020-12-8 16:56
再加点判断就行

—— 来自 samsung SM-G9650, Android 10上的 S1Next-鹅版 v2.4.3

诶诶诶 楼上应该讲的就是这个
sumproduct这个太少用到了
谢谢大佬我活了!
回复

使用道具 举报

     
 楼主| 发表于 2020-12-8 19:21 | 显示全部楼层
bm7号 发表于 2020-12-8 17:43
这样大概也行,上边数组大括号是ctrl+shift+enter按出来的。然后怎么把判断大小放在一个格我就不懂了。
...

说出来你可能不信
我统计的时候是用offset+match获取偏移量做的
忙了半天完全没发现问题
countif完全没想起来
熟记fn还是很有必要的...

评分

参与人数 1战斗力 +1 收起 理由
小猪不加班 + 1 思路广

查看全部评分

回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|Stage1st ( 沪ICP备13020230号-1|沪公网安备 31010702007642号 )

GMT+8, 2024-9-24 23:31 , Processed in 0.116644 second(s), 7 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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