数学中国

 找回密码
 注册
搜索
热搜: 活动 交友 discuz
查看: 7370|回复: 3

在下列 13 个小正方形中,涂上红、黄、蓝三种颜色,相邻格子不同色,有几种涂法?

[复制链接]
发表于 2017-4-27 06:47 | 显示全部楼层 |阅读模式
这是台湾网友 YAG 发表在“陆老师的《数学中国》园地”的一个帖子,

欢迎大家一起来想想如何解答:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2017-4-27 10:50 | 显示全部楼层
本帖最后由 天山草 于 2017-4-27 11:02 编辑

用 mathematica 求解,答案是 3936 种涂色方法。




说明:上面这个程序是台湾台北市立阳明中学的数学老师原创的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2017-4-27 10:55 | 显示全部楼层
本帖最后由 天山草 于 2017-4-27 10:59 编辑

另外,也可以用 VB 语言编程,可以把每一种涂色方法都表示出来。

Private Sub form_Click()
      
   '编程方法:用1、2、3表示三种颜色,写出由1、2、3 组成的13位数字。将这些数字填入指定的方格中,相邻方格中的数字不能相同。
   
   Open "3 色涂 13 方格.txt" For Output As #1
   
     m = 13   '周围 m 个圈
     x = "1111111111111"
     n = 0
     For i = x To x + 1000000000000#     '实际上到不了这样多的循环。
         x = x + 1        '从最小的数字开始依次加 1,把不符合要求的去掉,符合要求者写入文件。
        For j = m To 2 Step -1 '将字符串变换成“三进制”串(由1,2,3 组成,不是由 0,1,2 组成)
         If Mid(x, j, 1) = 4 Then
           Mid(x, j, 1) = 1      '本位减 3 变为 1
           Mid(x, j - 1, 1) = 1 + Mid(x, j - 1, 1)   '前位加上进位 1
         End If
        Next j
        If Mid(x, 1, 1) = 4 Then GoTo 999 '控制结束的语句,最高位变成 4,则结束运行。
     
         '以下筛选出符合要求的字串(相邻方格中的数字不能是一样的):{2, 3}, {3, 4}, {5, 6}, {6, 7}, {7, 8}, {8, 9}, {10, 11}, {11, 12},
                                    '{2, 6}, {6, 10}, {1, 3}, {3, 7}, {7, 11}, {11, 13}, {4, 8}, {8, 12}
        If Mid(x, 2, 1) = Mid(x, 3, 1) Or Mid(x, 3, 1) = Mid(x, 4, 1) Then GoTo 222
        If Mid(x, 5, 1) = Mid(x, 6, 1) Or Mid(x, 6, 1) = Mid(x, 7, 1) Then GoTo 222
        If Mid(x, 7, 1) = Mid(x, 8, 1) Or Mid(x, 8, 1) = Mid(x, 9, 1) Then GoTo 222
        If Mid(x, 10, 1) = Mid(x, 11, 1) Or Mid(x, 11, 1) = Mid(x, 12, 1) Then GoTo 222
        
        If Mid(x, 2, 1) = Mid(x, 6, 1) Or Mid(x, 6, 1) = Mid(x, 10, 1) Or Mid(x, 1, 1) = Mid(x, 3, 1) Then GoTo 222
        If Mid(x, 3, 1) = Mid(x, 7, 1) Or Mid(x, 7, 1) = Mid(x, 11, 1) Or Mid(x, 11, 1) = Mid(x, 13, 1) Then GoTo 222
        If Mid(x, 4, 1) = Mid(x, 8, 1) Or Mid(x, 8, 1) = Mid(x, 12, 1) Then GoTo 222
111:  n = n + 1
      Print n; "=>"; Trim(x)
      Print #1, n; "=>"; Trim(x)
      
222:  Next i
999:  Print #1, " n ="; n
      Close
      End Sub

输出结果是:
1 =>1121121211211
2 =>1121121211213
3 =>1121121211231
4 =>1121121211233
5 =>1121121211311
6 =>1121121211312
7 =>1121121213211
8 =>1121121213213
9 =>1121121213231
10 =>1121121213233
11 =>1121121231211
……………………………………
3929 =>3323323231231
3930 =>3323323231233
3931 =>3323323233132
3932 =>3323323233133
3933 =>3323323233211
3934 =>3323323233213
3935 =>3323323233231
3936 =>3323323233233
n = 3936   
 楼主| 发表于 2017-4-27 13:16 | 显示全部楼层
谢谢楼上 天山草 的解答。我已将帖子转贴到“陆老师的《数学中国》园地”。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|数学中国 ( 京ICP备05040119号 )

GMT+8, 2026-5-16 17:31 , Processed in 1.347307 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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