|
|
本帖最后由 天山草 于 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 |
|