◆千葉県 菜花子 さんからの解答
最初に、縦、横の線上に3匹のカエルを配置する。
赤と青のそれぞれの対角線上に、3匹ずつ並ぶように入れ替える。
AとBの場合は、赤の線上の3匹を青の線上へ、
Cの場合は、赤の線上の1匹を青の線上へ移動させる。
【問題1】(Cの配列を使って)
◆浜田 明巳 さんからの解答
次のように答はたくさんあります.
エクセルのマクロで解きました.
0 0 0 1 1 1 0 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 0 1 0 1 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 1 1 1 1 0 1 0 1 0 1 1 0 1 0 0 1 1 1 0 0 0 0 1 1 0 0 1 0 0 0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 0 1 0 1 0 1 1 0 1 0 1 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 0 0 1 1 0 1 1 1 0 0 0 0 1 1 0 0 1 0 0 0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 0 1 0 0 0 0 1 0 1 1 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 0 1 0 0 1 1 1 0 0 0 0 0 1 0 1 1 0 0 0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 0 0 0 1 0 0 1 1 0 0 1 1 0 0 1 0 0 0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 0 0 0 1 0 1 0 1 0 0 1 0 1 0 1 0 0 0 1 1 1 0 0 1 0 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 0 0 1 1 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 1 0 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 0 1 0 1 0 1 1 0 1 0 0 Option Explicit Sub Macro1() Sheets("Sheet1").Select Columns("B:G").Select Selection.ColumnWidth = 1.88: Selection.ClearContents Cells(1, 1).Value = 0: Range("A1").Select Dim a(6, 6) As Integer Call saiki1(1, a()) End Sub Sub saiki1(ByVal n As Integer, ByRef a() As Integer) Call saiki2(n, a(), 1) End Sub Sub saiki2(ByVal n As Integer, ByRef a() As Integer, ByVal i As Integer) Dim b(6, 6) As Integer, bb As Integer, wa As Integer Dim dame As Integer, chigau As Integer, onaji As Integer Dim gyou As Integer Dim j1 As Integer, j2 As Integer, j3 As Integer, j4 As Integer If i = 1 Then a(n, 1) = 1 Else a(n, i) = a(n, i - 1) + 1 End If While a(n, i) <= 6 - (3 - i) If i < 3 Then Call saiki2(n, a(), i + 1) Else If n < 6 Then Call saiki1(n + 1, a()) Else For j1 = 1 To 6 For j2 = 1 To 6 b(j1, j2) = 1 Next j2 Next j1 For j1 = 1 To 6 For j2 = 1 To 3 b(j1, a(j1, j2)) = 0 Next j2 Next j1 ' dame = 0: j1 = 1 While dame = 0 And j1 <= 6 + 2 wa = 0 For j2 = 1 To 6 Select Case j1 Case 1 To 6: wa = wa + b(j2, j1) '縦チェック Case 6 + 1: wa = wa + b(j2, j2) '右斜め下チェック Case Else: wa = wa + b(j2, 7 - j2) '左斜め下チェック End Select Next j2 If wa <> 3 Then dame = 1 Else j1 = j1 + 1 End If Wend ' If dame = 0 Then onaji = 0: j1 = 1 While onaji = 0 And j1 <= 7 j2 = 1 While onaji = 0 And j2 <= Cells(1, 1).Value gyou = j2 * 7 - 6 chigau = 0: j3 = 1 While chigau = 0 And j3 <= 6 j4 = 1 While chigau = 0 And j4 <= 6 Select Case j1 Case 1: bb = b(j3, 7 - j4) '上下対称 Case 2: bb = b(7 - j3, j4) '左右対称 Case 3: bb = b(j4, j3) 'y=x対称 Case 4: bb = b(7 - j4, 7 - j3) 'y=7-x対称 Case 5: bb = b(7 - j4, j3) '90°回転 Case 6: bb = b(7 - j3, 7 - j4) '180°回転 Case Else: bb = b(j4, 7 - j3) '270°回転 End Select If Cells(gyou + j3 - 1, j4) <> bb Then chigau = 1 Else j4 = j4 + 1 End If Wend j3 = j3 + 1 Wend If chigau = 0 Then onaji = 1 Else j2 = j2 + 1 End If Wend j1 = j1 + 1 Wend If onaji = 0 Then Cells(1, 1).Value = Cells(1, 1).Value + 1 gyou = Cells(1, 1).Value * 7 - 6 For j1 = 1 To 6 For j2 = 1 To 6 Cells(gyou + j1 - 1, j2 + 1).Value = b(j1, j2) Next j2 Next j1 End If End If End If End If a(n, i) = a(n, i) + 1 Wend End Sub
◆東京都 JAVAKnight さんからの解答
【問題1】×,×,○,○,○,×,
○,×,×,○,×,○,
×,○,×,×,○,○,
○,×,○,○,×,×,
×,○,○,×,○,×,
○,○,×,×,×,○
は正解の一つである。
また、各行に三つずつの蛙を置く方法の総数は、
(6!/3!/(6-3)!)6=64000000通りなので、
この数だけ調べて問題の条件に合うものを調べると、
各行、各列と斜めの列に三つの蛙が並ぶ蛙の配置は、24032通りあることが分かる。