|
|
本帖最后由 天山草 于 2016-2-6 09:13 编辑
我用【部分编程】+【一点分析】试做此题。
先编程,设四对夫妻分别是 1,1;2,2;3,3;4,4。至于谁是老公,谁是老婆,先不区分了哈。为什么要这样呢?因为这样程序运行时间会短许多,至于运行结果嘛,可以乘 16 进行修正。
编程想法如下。用上述八个数字组成 8 位数,如果要求任何相邻的两个数字不能相同,问:能组成多少个不同的八位数?
VB6 程序如下:
Private Sub form_Click()
Dim a(4)
k = 0
For i = 11223344 To 44332211
For u = 1 To 4: a(u) = 0: Next u
mi = Trim(Str(i)) '换成串
For v = 1 To 8
If Mid(mi, v, 1) = 1 Then a(1) = a(1) + 1 '1 的个数
If Mid(mi, v, 1) = 2 Then a(2) = a(2) + 1 '2 的个数
If Mid(mi, v, 1) = 3 Then a(3) = a(3) + 1 '3 的个数
If Mid(mi, v, 1) = 4 Then a(4) = a(4) + 1 '4 的个数
Next v
If a(1) <> 2 Or a(2) <> 2 Or a(3) <> 2 Or a(4) <> 2 Then GoTo 222 '不是由四对夫妻组成的,淘汰
For j = 1 To 7
If Mid(mi, j, 1) = Mid(mi, j + 1, 1) Then GoTo 222 '相邻数字一样,淘汰
Next j
k = k + 1
Print k; "---"; mi
222: Next i
Close
End Sub
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
运行结果是:
1 ---12123434
2 ---12124343
3 ---12132434
4 ---12134234
5 ---12134243
6 ---12134324
7 ---12134342
8 ---12142343
9 ---12143234
10 ---12143243
11 ---12143423
12 ---12143432
13 ---12312434
14 ---12313424
15 ---12314234
…………………………
858 ---43421213
859 ---43421231
860 ---43421312
861 ---43421321
862 ---43423121
863 ---43431212
864 ---43432121
====================================
可见共有 864 种不同的八位数。
最后再考虑 “老公老婆” 不分的问题。以 43432121 为例,若 A, B, C, D 分别是 1, 2, 3, 4 的老公,则 43432121 应写成 DC43BA21, 如果把同一对夫妻的老公老婆位置交换,当然也符合要求而成为另一种排列方法。例如上面将 D 与 4 交换得: 4CD3BA21, 这样一来,交换方案共有 15 种,其中 4 种是只交换 1 对夫妻的位置, 6 种是同时交换 2 对夫妻的位置, 4 种是同时交换 3 对夫妻的位置,还有 1 种是同时交换 4 对夫妻的位置,以上共 15 种,加上原来的 “任何夫妻都不交换位置”,共有 16 种排列方法。
因此,此题的答案是 864×16 = 13824 种坐法。
|
|