ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

EH搜索     
EH云课堂-专业的职场技能充电站 Excel转在线管理系统,怎么做看这里 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
Excel不给力? 何不试试FoxTable! Excel 2016函数公式学习大典 EH云课堂直播课程免费学 打造核心竞争力的职场宝典
300集Office 2010微视频教程 Tableau-数据可视化工具 精品推荐-800套精选PPT模板,点击获取 ExcelHome出品 - VBA代码宝免费下载
你的Excel 2010实战技巧学习锦囊 欲罢不能, 过目难忘的 Office 新界面 Excel VBA经典代码实践指南
楼主: dongdonggege

[求助] 世界最难的数组怎么赋值

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-2-12 21:58 | 显示全部楼层
micch 发表于 2019-2-12 21:54
我可不是什么大师,VBA肯定可以做到VC这个例子,不限制变化的火柴数量,那就复杂点,而且肯定能成立,如果 ...

上面不是说了,移动1根吗?这样移动2根,就可以循环了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-2-12 22:01 | 显示全部楼层
micch 发表于 2019-2-12 21:54
我可不是什么大师,VBA肯定可以做到VC这个例子,不限制变化的火柴数量,那就复杂点,而且肯定能成立,如果 ...

老师,如果做出来,让我等分享下。

TA的精华主题

TA的得分主题

发表于 2019-2-12 22:16 来自手机 | 显示全部楼层
手机回不好试,外循环遍历表达式里的字符,内循环遍历构造表符合条件的行,可能可以吧。只是这想法太直来直去了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-2-12 22:22 | 显示全部楼层
爱疯 发表于 2019-2-12 22:16
手机回不好试,外循环遍历表达式里的字符,内循环遍历构造表符合条件的行,可能可以吧。只是这想法太直来直 ...

老师,试好了,让我们分享,谢谢。

TA的精华主题

TA的得分主题

发表于 2019-2-12 22:51 | 显示全部楼层
dongdonggege 发表于 2019-2-12 21:58
上面不是说了,移动1根吗?这样移动2根,就可以循环了。

猜下楼主意图:

数字与运算符:
1,2,3,4,5,6,7,8,9,0,+,-,×,/,=
对应火柴根数:
1,5,5,4,5,6,2,7,6,4,2,1,2,1,2
共53根

出题规则:
第一步:建立题库
方案1:指定一定火柴根数时,求出可生成的四则运算题库,并随机出题
    可附加限制条件,例如:数字只能出现一次,或运算符号只出现一次等(=号必然存在)
方案2:直接按数学四则运算任意出题
    可加附加限制条件,十位以内,百位以内等
(注,附加条件是关键,直接影响到整个编程规则的复杂程度!)

第二步:根据运算题目,按三大原则,求所有可能的答案组合
1)移动一根火柴时,所有可能的答案组合
2)减少一根火柴时,所有可能的答案组合
3)增加一根火柴时,所有可能的答案组合

不知是否这样?

TA的精华主题

TA的得分主题

发表于 2019-2-13 01:02 | 显示全部楼层
本帖最后由 aman1516 于 2019-2-13 16:31 编辑

基础数据表,数组应根据“实际需求”再动态生成
火柴棒游戏.zip (46.71 KB, 下载次数: 2)

TA的精华主题

TA的得分主题

发表于 2019-2-13 07:20 | 显示全部楼层
dongdonggege 发表于 2019-2-12 21:20
我可能要调用这个函数,到时不好调用吧

'一维:数字或运算符
'二维:方法(0-增加、1-减少、2-移动)
'三维:每种方法的产生的结果(最多三种,空结束)

'字典:数字或运算符镜像一维维标号

Option Explicit

Sub test()
  Dim dic, i, arr
  Set dic = CreateObject("scripting.dictionary")
  arr = Split("0 1 2 3 4 5 6 7 8 9 + -")
  For i = 0 To UBound(arr): dic(arr(i)) = i: Next
  ReDim arr(11, 2, 2) As String
  Call init(arr)
  Debug.Print try(arr, dic("+"), 1) '"+" 减少1根
  Debug.Print try(arr, dic("0"), 2) '"0" 移动1根
  Debug.Print try(arr, dic("1"), 0) '"1" 增加1根
  Debug.Print try(arr, dic("8"), 1) '"8" 减少1根
End Sub

Function try(arr, m, n) As String
  Dim brr(), cnt, i
  For i = 0 To 2
    If Len(arr(m, n, i)) = 0 Then Exit For
    cnt = cnt + 1: ReDim Preserve brr(i)
    brr(i) = arr(m, n, i)
  Next
  If i > 0 Then try = Join(brr, ",")
End Function

Function init(arr) '按这方法自己添加其它数据
  arr(0, 0, 0) = 8: arr(0, 2, 0) = 6: arr(0, 2, 1) = 9
  arr(1, 0, 0) = 7
  arr(2, 2, 0) = 3
  ''''
  arr(8, 1, 0) = 9: arr(8, 1, 1) = 6: arr(8, 1, 2) = 0
  ''''
  arr(10, 1, 0) = 1: arr(10, 1, 1) = "-"
End Function

TA的精华主题

TA的得分主题

发表于 2019-2-13 09:14 | 显示全部楼层
本帖最后由 micch 于 2019-2-13 09:27 编辑

这个init(arr)理解不了,每次遇到数组维数的问题,都是一头雾水,我还在想用纯粹的数组循环遍历各种可能的结果是否相等呢
除法和乘法就算了,只做加减法,结果一个   1-9=8  给绕住了, 移动一根是可以成立的  变为 1=9-8   ;或者类似 9+3=5 变为 9-3=6


所以规则应该定为只移动3个数字还好办一些

TA的精华主题

TA的得分主题

发表于 2019-2-13 09:24 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-2-13 09:35 | 显示全部楼层
  1. Sub 液晶数字()
  2. '               —   1
  3. '          2  |    |  3
  4. '               —   4
  5. '          5  |    |  6
  6. '               —   7
  7.     Dim dicNum As Object
  8.     Set dicNum = CreateObject("Scripting.Dictionary")
  9.     dicNum("1110111") = 0
  10.     dicNum("0010010") = 1
  11.     dicNum("1011101") = 2
  12.     dicNum("1011011") = 3
  13.     dicNum("0111010") = 4
  14.     dicNum("1101011") = 5
  15.     dicNum("1101111") = 6
  16.     dicNum("1010010") = 7
  17.     dicNum("1111111") = 8
  18.     dicNum("1111011") = 9
  19. End Sub
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关注官方微信,每天学会一个新技能

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

GMT+8, 2019-10-18 14:10 , Processed in 0.068493 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2020 Wooffice Inc.

   

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

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

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