ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] 四条线连接九个点

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-6-18 20:11 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
香川群子 发表于 2013-6-18 15:14
5x5点阵是需要最少9条线么?

3阶的像弓箭,4阶的像条鱼,5阶我只做出一种解法,所以没看出什么来。

TA的精华主题

TA的得分主题

发表于 2013-6-18 22:12 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 香川群子 于 2013-6-18 22:14 编辑

线条数规律



线条数量.jpg


TA的精华主题

TA的得分主题

发表于 2013-6-18 23:32 | 显示全部楼层
更优解的可能性不大

点阵线条.jpg
3-9点阵线条.jpg

点阵线条.rar

20.44 KB, 下载次数: 14

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-6-19 08:32 | 显示全部楼层
香川群子 发表于 2013-6-18 23:32
更优解的可能性不大

这样,图只有一种,很单调,而且看不出变化,应该还有其他的线路图,你前面说的,4阶的扩大到5点阵,那要扩大到6点阵,或7点阵,不是更有的选择吗?况且,有时交点并不在点阵(或方格)的中心呢?可以考虑下。谢谢

TA的精华主题

TA的得分主题

发表于 2013-6-19 08:45 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 lsdongjh 于 2013-6-19 08:52 编辑

根据题目的含义,我记得点上是不能重复的,当年的数据老师说过,正确的解法如下:
QQ图片20130619084157.jpg
其他的解法是有问题的,并不符合题意思:
QQ图片20130619084338.jpg

也许这才是正解:
QQ图片20130619085057.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-6-19 09:31 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 banjinjiu 于 2013-6-19 09:33 编辑
lsdongjh 发表于 2013-6-19 08:45
根据题目的含义,我记得点上是不能重复的,当年的数据老师说过,正确的解法如下:

其他的解法是有问题的,并不 ...


楼上说的对,但是现在要使用VBA来解决,先做出个模型,然后再修改。

TA的精华主题

TA的得分主题

发表于 2013-6-19 14:24 | 显示全部楼层
这个问题已经彻底解决。

用VBA代码验证,发现手工计算容易产生错漏,导致线条总数错误。

还是计算机的结果可靠。呵呵。



点阵线条.zip

35.45 KB, 下载次数: 16

TA的精华主题

TA的得分主题

发表于 2013-6-19 14:35 | 显示全部楼层
根据楼主说明,整理问题以及规则如下:

1. n x n 的矩形点阵:
   如 3 x 3 = 9 个点, 4 x 4 = 16 个点…… 20 x 20 = 400 个点

2. 要求一笔到底画出能通过/覆盖所有点的线条
  其中,基本线条类型有:
    水平横线、垂直竖线、从左下到右上的左斜线、从右下到左上的右斜线。
  (理论上应该允许任意角度的直线,但显然覆盖效率低肯定没有实际意义。)

3. 线条起点、终点任意、线条长度任意。
  (实际应该在点阵区域附近就足够了。)

以上。



分析:
由于限定了需要采用【一笔到底的连笔线段】,所以实际线条显然是近似封闭循环的。

最有效率的显然是: 一横、一竖、一斜线构成的三角形,能够覆盖最多的点子。


…………

这以后,稍加分析,思路就出来啦。

TA的精华主题

TA的得分主题

发表于 2013-6-19 14:39 | 显示全部楼层
有空再通过VBA把线条画出来就可以说彻底完成啦。
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     If Target.Address = "$A$1" Then
  3.         If [a1] = 0 Then n = InputBox("", "", 11) Else n = [a1]
  4.         [c3].Resize(n, n).Name = "Rng"
  5.         Call kagawa(n)
  6.     End If
  7. End Sub
  8. Sub kagawa(n)
  9.    
  10.     [b2:az52].Clear
  11.     [c3].Resize(n, n) = 1
  12.    
  13.     '婲揰
  14.     [b2].Offset(n).Activate
  15.     ActiveCell.Interior.ColorIndex = 8
  16.     ActiveCell = ChrW(8594)
  17.    
  18.     '墶慄1(悈暯慄1)
  19.     For i = 1 To n + 1
  20.         ActiveCell.Offset(, 1).Activate
  21.         ActiveCell.Interior.ColorIndex = 6
  22.         If ActiveCell = 1 Then ActiveCell = "*"
  23.     Next
  24.     ActiveCell = ChrW(8598)
  25.     k = k + 1
  26.    
  27.     '塃幬慄1
  28.     For i = 1 To n
  29.         ActiveCell.Offset(-1, -1).Activate
  30.         ActiveCell.Interior.ColorIndex = 6
  31.         If ActiveCell = 1 Then ActiveCell = "*"
  32.     Next
  33.     ActiveCell = ChrW(8595)
  34.     k = k + 1
  35.    
  36.    
  37.     '廲慄1(悅捈慄1)
  38.     y = Round((2 * n - 4) / 3)
  39.     t = Int((n - 1) / 3)
  40.     For i = 1 To n + t
  41.         ActiveCell.Offset(1).Activate
  42.         ActiveCell.Interior.ColorIndex = 6
  43.         If ActiveCell = 1 Then ActiveCell = "*" Else If ActiveCell = "" Then ActiveCell = ChrW(8595)
  44.     Next
  45.     ActiveCell = ChrW(8599)
  46.     k = k + 1
  47.    
  48.     '嵍幬慄丄墶慄丄廲慄丂孞傝曉偡
  49.     For j = 1 To y
  50.         For i = 1 To n + t - j
  51.             ActiveCell.Offset(-1, 1).Activate
  52.             ActiveCell.Interior.ColorIndex = 6
  53.             If ActiveCell = 1 Then ActiveCell = "*" Else If ActiveCell = "" Then ActiveCell = ChrW(8599)
  54.         Next
  55.         ActiveCell = ChrW(8592)
  56.         k = k + 1
  57.         If Application.Sum(Range("Rng")) = 0 Then Exit For
  58.         
  59.         For i = 1 To n + t - j - 1
  60.             ActiveCell.Offset(, -1).Activate
  61.             ActiveCell.Interior.ColorIndex = 6
  62.             If ActiveCell = 1 Then ActiveCell = "*" Else If ActiveCell = "" Then ActiveCell = ChrW(8592)
  63.         Next
  64.         k = k + 1
  65.         If Application.Sum(Range("Rng")) = 0 Then Exit For
  66.         
  67.         For i = 1 To n + t - j
  68.             ActiveCell.Offset(1).Activate
  69.             ActiveCell.Interior.ColorIndex = 6
  70.             If ActiveCell = 1 Then ActiveCell = "*" Else If ActiveCell = "" Then ActiveCell = ChrW(8595)
  71.         Next
  72.         ActiveCell = ChrW(8599)
  73.         k = k + 1
  74.         If Application.Sum(Range("Rng")) = 0 Then Exit For
  75.     Next
  76.    
  77.     ActiveCell.Interior.ColorIndex = 8
  78.     ActiveCell = ChrW(9678)
  79.     Application.StatusBar = n & "x" & n & " = " & k & " (t= " & t & ")"
  80.    
  81. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2013-6-19 14:44 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
有空再通过VBA把线条画出来就可以说彻底完成啦。
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     If Target.Address = "$A$1" Then
  3.         If [a1] = 0 Then n = InputBox("", "", 11) Else n = [a1]
  4.         [c3].Resize(n, n).Name = "Rng"
  5.         Call kagawa(n)
  6.     End If
  7. End Sub
  8. Sub kagawa(n)
  9.    
  10.     [b2:az52].Clear
  11.     [c3].Resize(n, n) = 1
  12.    
  13.     '婲揰
  14.     [b2].Offset(n).Activate
  15.     ActiveCell.Interior.ColorIndex = 8
  16.     ActiveCell = ChrW(8594)
  17.    
  18.     '墶慄1(悈暯慄1)
  19.     For i = 1 To n + 1
  20.         ActiveCell.Offset(, 1).Activate
  21.         ActiveCell.Interior.ColorIndex = 6
  22.         If ActiveCell = 1 Then ActiveCell = "*"
  23.     Next
  24.     ActiveCell = ChrW(8598)
  25.     k = k + 1
  26.    
  27.     '塃幬慄1
  28.     For i = 1 To n
  29.         ActiveCell.Offset(-1, -1).Activate
  30.         ActiveCell.Interior.ColorIndex = 6
  31.         If ActiveCell = 1 Then ActiveCell = "*"
  32.     Next
  33.     ActiveCell = ChrW(8595)
  34.     k = k + 1
  35.    
  36.    
  37.     '廲慄1(悅捈慄1)
  38.     y = Round((2 * n - 4) / 3)
  39.     t = Int((n - 1) / 3)
  40.     For i = 1 To n + t
  41.         ActiveCell.Offset(1).Activate
  42.         ActiveCell.Interior.ColorIndex = 6
  43.         If ActiveCell = 1 Then ActiveCell = "*" Else If ActiveCell = "" Then ActiveCell = ChrW(8595)
  44.     Next
  45.     ActiveCell = ChrW(8599)
  46.     k = k + 1
  47.    
  48.     '嵍幬慄丄墶慄丄廲慄丂孞傝曉偡
  49.     For j = 1 To y
  50.         For i = 1 To n + t - j
  51.             ActiveCell.Offset(-1, 1).Activate
  52.             ActiveCell.Interior.ColorIndex = 6
  53.             If ActiveCell = 1 Then ActiveCell = "*" Else If ActiveCell = "" Then ActiveCell = ChrW(8599)
  54.         Next
  55.         ActiveCell = ChrW(8592)
  56.         k = k + 1
  57.         If Application.Sum(Range("Rng")) = 0 Then Exit For
  58.         
  59.         For i = 1 To n + t - j - 1
  60.             ActiveCell.Offset(, -1).Activate
  61.             ActiveCell.Interior.ColorIndex = 6
  62.             If ActiveCell = 1 Then ActiveCell = "*" Else If ActiveCell = "" Then ActiveCell = ChrW(8592)
  63.         Next
  64.         k = k + 1
  65.         If Application.Sum(Range("Rng")) = 0 Then Exit For
  66.         
  67.         For i = 1 To n + t - j
  68.             ActiveCell.Offset(1).Activate
  69.             ActiveCell.Interior.ColorIndex = 6
  70.             If ActiveCell = 1 Then ActiveCell = "*" Else If ActiveCell = "" Then ActiveCell = ChrW(8595)
  71.         Next
  72.         ActiveCell = ChrW(8599)
  73.         k = k + 1
  74.         If Application.Sum(Range("Rng")) = 0 Then Exit For
  75.     Next
  76.    
  77.     ActiveCell.Interior.ColorIndex = 8
  78.     ActiveCell = ChrW(9678)
  79.     Application.StatusBar = n & "x" & n & " = " & k & " (t= " & t & ")"
  80.    
  81. End Sub
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-6-1 17:21 , Processed in 0.048291 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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