ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 15533|回复: 42

[Excel 函数与公式] [开_150]斗牛游戏[已总结]

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-7-1 15:37 | 显示全部楼层 |阅读模式
本帖最后由 delete_007 于 2015-8-25 15:26 编辑

游戏规则
总结帖33楼
“斗牛”是一种在我们这个区域流行的扑克牌游戏。一副扑克牌,去掉大、小王,剩余52张用于牌局。
每人每局发5张牌,根据这5张牌计算点数,比较点数大小。


为方便题目,简化点数计算规则如下。
1、A-K分别用数字1-13代替。在计算点数时1-10按其本身计算,而11-13均被当作10计算。
2、5张牌中,首先判断是否其中有3张牌之和为10或10的倍数
3、若步骤2结果为否,视为没有点数,则取5张牌中最大的一张牌的点,显示结果为“XX大”
4、若步骤2结果为是,视为有点数,则计算剩余2张牌之和。
5、若步骤4中2张牌之和也为10或10的倍数,显示结果为“牛”
6、如步骤4中2张牌之和不为10或10的倍数,则点数为2张牌之和的个位数,显示结果为“X点”
游戏中,牛  > X点 > XX大,这里我们不比较大小了,只要计算点数即可
题目要求
1、纯函数公式,一键下拉;拒绝VBA、定义名称、设置单元格格式等
2、不得引用除绿色区域外的其它区域,row、column函数除外
3、不得直接使用手工不连续的数组,如{1,3,4,6,7}等之类的
4、不限制excel版本,函数多了思路也多,更有趣
结果评分
1、正确答案,且长度<=200字符的给予技术1分
2、正确答案,且长度<150字符的给予技术2分
竞赛日期:2015年7月1日 至 2015年8月15日

斗牛游戏竞赛题 -题目.rar (8.45 KB, 下载次数: 373)


评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-7-1 15:52 | 显示全部楼层
本帖最后由 delete_007 于 2015-7-2 15:23 编辑

F2数组公式,147字符:
  1. =IF(OR(MMULT(1+TEXT(A2:E2,"[>9]!0")%,MOD(INT(COLUMN(A:AE)/2^ROW($1:$5)*2),2))={3;3.1;3.2}),TEXT(MOD(SUMIF(A2:E2,"<10"),10),"0点;;牛"),MAX(A2:E2)&"大")
复制代码

稍简化,省几个字符,142字符。
  1. =IF(OR(MMULT(1+A2:E2*(A2:E2<10)%,MOD(INT(COLUMN(A:AE)/2^ROW($1:$5)*2),2))={3;3.1;3.2}),TEXT(RIGHT(SUMIF(A2:E2,"<10")),"0点;;牛"),MAX(A2:E2)&"大")
复制代码

评分

4

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-7-5 11:31 | 显示全部楼层
  1. =IF(AND(MOD(SUM(-TEXT(A2:E2,"[>9]1!0"))+IF(ROW($1:$5)<>COLUMN(A:E),TEXT(A2:E2,"[>9]1!0")+TRANSPOSE(TEXT(A2:E2,"[>9]1!0")),1%),10)),MAX(A2:E2)&"大",TEXT(RIGHT(SUM(-TEXT(A2:E2,"[>9]1!0"))),"0点;;牛"))
复制代码

斗牛游戏竞赛题 -题目.rar

9.98 KB, 下载次数: 66

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-7-5 12:57 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 13732120571 于 2015-7-9 14:30 编辑

2003版*************************************
189字符
  1. =IF(AND(ISNA(MATCH({310,320,330},MMULT((MOD(ROW($1:$32)/2^COLUMN(A:E)*2,2)<1)*TEXT(A2:E2,"[>9]11!0;100"),1^ROW(1:5)),))),MAX(A2:E2)&"大",TEXT(MOD(SUM(LOOKUP(A2:E2,ROW($1:$10))),10),"0点;;牛"))
复制代码

185字符
  1. =IF(COUNT(MATCH({310,320,330},MMULT((MOD(ROW($1:$32)/2^COLUMN(A:E)*2,2)<1)*TEXT(A2:E2,"[>9]11!0;100"),1^ROW(1:5)),)),TEXT(MOD(SUM(LOOKUP(A2:E2,ROW($1:$10))),10),"0点;;牛"),MAX(A2:E2)&"大")
复制代码
174字符
  1. =IF(OR({310,320,330}=MMULT((MOD(ROW($1:$32)/2^COLUMN(A:E)*2,2)<1)*TEXT(A3:E3,"[>9]11!0;100"),1^ROW(2:6))),TEXT(MOD(SUM(LOOKUP(A3:E3,ROW($1:$10))),10),"0点;;牛"),MAX(A3:E3)&"大")
复制代码

154字符
  1. =TEXT(LOOKUP(9,IF({0,1},MOD(HLOOKUP("3?0*",MMULT(100+TEXT(A2:E2,"[>9]!0"),10^4^(MOD(COLUMN(A:AF)/2^ROW($1:$5)*2,2)<1))&"",1,),10),-MAX(A2:E2))),"0点;0大;牛")
复制代码
149字符
  1. =TEXT(LOOKUP(9,IF({0,1},MOD(HLOOKUP("3?0*",MMULT(100+A2:E2*(A2:E2<10),10^4^(MOD(COLUMN(C:Y)/2^ROW($1:$5)*2,2)<1))&"",1,),10),-MAX(A2:E2))),"0点;0大;牛")
复制代码

2007版**********************************
160字符
  1. =IFERROR(TEXT(RIGHT(VLOOKUP("3?0*",MMULT((100+LOOKUP(A2:E2,COLUMN(A:J)))/1%%^(MOD(ROW($1:$32)/2^COLUMN(A:E)*2,2)<1),1^ROW(1:5))&"",1,)),"0点;;牛"),MAX(A2:E2)&"大")
复制代码
152字符
  1. =TEXT(IFERROR(RIGHT(VLOOKUP("3?0*",MMULT((11&TEXT(A2:E2,"[>9]!0"))/1%%^(MOD(ROW($1:32)/2^COLUMN(A:E)*2,2)<1),1^ROW(1:5))&"",1,)),-MAX(A2:E2)),"0点;0大;牛")
复制代码
继续向150冲~~
142字符
  1. =TEXT(IFERROR(RIGHT(HLOOKUP("3?0*",MMULT(100+TEXT(A2:E2,"[>9]!0"),10^4^(MOD(COLUMN(A:AF)/2^ROW($1:$5)*2,2)<1))&"",1,)),-MAX(A2:E2)),"0点;0大;牛")
复制代码
继续还能冲吗?{:soso_e130:}

********2015-7-5 23:13 编辑
据说2013有IFNA   
139字符
  1. =TEXT(IFNA(RIGHT(HLOOKUP("3?0*",MMULT(100+TEXT(A2:E2,"[>9]!0"),10^4^(MOD(COLUMN(A:AF)/2^ROW($1:$5)*2,2)<1))&"",1,)),-MAX(A2:E2)),"0点;0大;牛")
复制代码

{:soso_e130:}不知还能简化不~{:soso_e163:}
********2015-7-9 14:07编辑
134字符
  1. =TEXT(IFNA(RIGHT(HLOOKUP("3?0*",MMULT(100+A2:E2*(A2:E2<10),10^4^(MOD(COLUMN(C:Y)/2^ROW($1:$5)*2,2)<1))&"",1,)),-MAX(A2:E2)),"0点;0大;牛")
复制代码
从猿人到现代人{:soso_e130:}
这个进化史,漫漫长路~


评分

10

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-7-5 20:26 | 显示全部楼层
本帖最后由 delete_007 于 2015-8-20 12:39 编辑

5、
  1. =TEXT(IFERROR(MOD(HLOOKUP("3?02*",MMULT((A2:E2<10)*A2:E2+100,1000^(MOD(COLUMN(A:X)/2^ROW($1:$5)*2,2)<1))&"",1,),10),-MAX(A2:E2)),"0点;0大;牛")
复制代码



4、=TEXT(MIN(--REPLACE(MID(MMULT((A2:E2<10)*A2:E2+1%,10^8^(MOD(COLUMN(A:X)/2^ROW($1:$5)*2,2)<1))+997*10^6,2,9),8,1,),MAX(A2:E2)*1000),"[>9]0,大;[>]0点;牛")

3、=TEXT(MIN(--REPLACE(MID(MMULT(IF(A2:E2>9,,A2:E2)+1%,10^8^(MOD(COLUMN(A:X)/2^ROW($1:$5)*2,2)<1))+997*10^6,2,9),8,1,),MAX(A2:E2)*1000),"[>9]0,大;[>]0点;牛")

2、=TEXT(MIN(MMULT(MOD(ABS({1,0}*SUM(IF(A2:E2>9,,A2:E2))+MMULT(-TEXT(N(OFFSET(A2,,MID({1;2;3;4;12;13;14;23;24;34}&0,{1,2},1))),"[>9]!0"),{1;1})),10),{10;1}^6),MAX(A2:E2)*1000),"[>1000]#,大;[>]0点;牛")

先开辆 火车再说
1、=TEXT(MIN(MMULT({10,1}^6,MOD(ABS({0;1}*SUM(IF(A2:E2>9,10,A2:E2))-TEXT(MMULT(IF(A2:E2>9,10,A2:E2)+100,--MID(DEC2BIN(COLUMN(AI:BH)),ROW($2:$6),1))-300,"[>99]9;9;0")),10)),MAX(A2:E2)*1000),"[>1000]0,大;[>]0点;牛")






评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-7-5 21:01 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 delete_007 于 2015-8-20 12:39 编辑

F2数组(146):
=IF(AND(MOD(MMULT(A2:E2*(A2:E2<10)+1%,--MID(DEC2BIN(COLUMN(G:AB),5),ROW($1:$5),1))-3%,10)),MAX(A2:E2)&"大",TEXT(RIGHT(SUMIF(A2:E2,"<10")),"0点;;牛"))
不过为了防止不知道会不会蹦出来的浮点误差(148):
  1. =IF(AND(MOD(MMULT(A2:E2*(A2:E2<10)*10+1,--MID(DEC2BIN(COLUMN(G:AB),5),ROW($1:$5),1))-3,100)),MAX(A2:E2)&"大",TEXT(RIGHT(SUMIF(A2:E2,"<10")),"0点;;牛"))
复制代码

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-7-6 20:50 | 显示全部楼层
本帖最后由 sayhi95 于 2015-7-9 20:18 编辑
  1. =IF(MIN(MOD(SUM((A2:E2<10)*A2:E2)-SMALL(IF(ROW($1:$5)<>COLUMN(A:E),(A2:E2<10)*A2:E2+TRANSPOSE((A2:E2<10)*A2:E2)),ROW($1:$10)*2),10)),MAX(A2:E2)&"大",TEXT(MOD(SUM((A2:E2<10)*A2:E2),10),"0点;;牛"))
复制代码

评分

4

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-7-8 17:01 | 显示全部楼层
本帖最后由 delete_007 于 2015-8-20 12:40 编辑
  1. =IF(SUM(IF(MOD(ROW($1:$25),6)=1,,IF(MOD(LOOKUP(MOD(ROW($1:$25)-1,5)+1,ROW($1:$5),(A16:E16<10)*A16:E16)+LOOKUP(INT((ROW($1:$25)-1)/5)+1,ROW($1:$5),(A16:E16<10)*A16:E16)-SUM((A16:E16<10)*A16:E16),10),,1))),IF(MOD(SUM((A16:E16<10)*A16:E16),10),MOD(SUM((A16:E16<10)*A16:E16),10)&"点","牛"),MAX(A16:E16)&"大")
复制代码


先解出来再说,还没有优化过,长度神马的再想想……

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-7-9 14:20 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 cmxxccxx 于 2015-7-10 13:01 编辑

要求是一键下拉,那就不能用数组公式了;不能使用不连续常量数组{},那可以使用常量,可以使用ROW,COLUMN,想了很久,想到的是
  1. =IF(MIN(MOD(TEXT(MMULT(100+A2:E2*(A2:E2<10),N(MOD(COLUMN(A:Z)*2/2^ROW($1:$5),2)<1)),"[>399]9;[<300]9;0"),10)),MAX(A2:E2)&"大",TEXT(MOD(SUMPRODUCT(A2:E2*(A2:E2<10)),10),"0点;;牛"))
复制代码



再想还能压缩到141字符,03版普通公式下拉:(高版本的不会,坐等看答案)
  1. =IF(COUNT(FIND(3%,MMULT(1%+A2:E2*(A2:E2<10),N(MOD(COLUMN(A:Z)*2/2^ROW($1:$5),2)<1)))),TEXT(RIGHT(SUMIF(A2:E2,"<10")),"0点;;牛"),MAX(A2:E2)&"大")
复制代码

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-7-9 15:49 | 显示全部楼层
  1. =IF(COUNT(SEARCH("3?0",MMULT((A2:E2<=9)*A2:E2+100,-(MOD(COLUMN(1:1)/2^ROW($1:$5),2)<1)))),TEXT(RIGHT(SUM((A2:E2<=9)*A2:E2)),"0点;;牛"),MAX(A2:E2)&"大")
复制代码

评分

2

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-4-27 03:29 , Processed in 0.058601 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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