数组 1 2 3 4 5 6 7 8 9 这样一组数组。
任意一个数字移动得出不同的排列组合。
例如; 把2移动到数字1的前面,那么组合排列变成2 1 3 4 5 6 7 8 9 这样一组数组。
那么,不同的组合排列一共多少?代码中如何得出所有不同组合复式呢?
------解决思路----------------------
Sub MoveCom()
Dim list As List(Of Integer)= New List(Of Integer)
For i = 0 To 8
list.Add(i)
Next
Dim pAct = Sub(x)
Console.Write(x)
End Sub
Dim nAct = Sub(oldIndex As Integer, newIndex As Integer)
Dim tmp = list.ToList()
tmp.Insert(newIndex, list(oldIndex))
tmp.RemoveAt(IIf(oldIndex > newIndex, oldIndex + 1, oldIndex))
tmp.ForEach(pAct)
Console.WriteLine()
End Sub
For i = 0 To list.Count - 1 Step 1
For j = i - 1 To 0 Step -1
nAct(i, j)
Next j
For j = i + 2 To list.Count Step 1
nAct(i, j)
Next
Console.WriteLine("Move Finish." + list(i).ToString())
Next i
End Sub
不容易啊,还要查了VB语法来写
------解决思路----------------------
9个数字,每个数字可以移动的位置有8个,所以8*9=72种移动方式。
其中相邻两个数(比如12),前面的后移一格、后面的前移一格是相同的(都是21)。共8个相邻位要去掉重复。
统计公式为:n*(n-1)-(n-1) = (n-1)*(n-1)
Imports System
Module Module1
Dim a() As Integer = {1, 2, 3, 4, 5, 6, 7, 8, 9}
Dim moveCount As Integer = 0
Sub Move(ByVal i As Integer, ByVal j As Integer)
Dim b(a.Length - 1) As Integer
Array.Copy(a, b, a.Length)
If i < j Then '向右移'
Array.Copy(a, i + 1, b, i, j - i)
b(j) = a(i)
Else '向左移'
Array.Copy(a, j, b, j + 1, i - j)
b(j) = a(i)
End If
moveCount += 1
Console.Write("{0:d2},", moveCount)
For k As Integer = 0 To b.Length - 1
Console.Write("{0:d1}", b(k))
Next
Console.WriteLine()
End Sub
Sub Main()
For i As Integer = 0 To a.Length - 1 '源位置'
For j As Integer = 0 To a.Length - 1 '目标位置'
If (i <> j) AndAlso (i <> (j + 1)) Then '相邻位移动只取后移'
Move(i, j)
End If
Next
Next
Console.ReadLine()
End Sub
End Module
01,213456789
02,231456789
03,234156789
04,234516789
05,234561789
06,234567189
07,234567819
08,234567891
09,132456789
10,134256789
11,134526789
12,134562789
13,134567289
14,134567829
15,134567892
16,312456789
17,124356789
18,124536789
19,124563789
20,124567389
21,124567839
22,124567893
23,412356789
24,142356789
25,123546789
26,123564789
27,123567489
28,123567849
29,123567894
30,512346789
31,152346789
32,125346789
33,123465789
34,123467589
35,123467859
36,123467895
37,612345789
38,162345789
39,126345789
40,123645789
41,123457689
42,123457869
43,123457896
44,712345689
45,172345689
46,127345689
47,123745689
48,123475689
49,123456879
50,123456897
51,812345679
52,182345679
53,128345679
54,123845679
55,123485679
56,123458679
57,123456798
58,912345678
59,192345678
60,129345678
61,123945678
62,123495678
63,123459678
64,123456978