忍者ブログ
[449] [448] [447] [446] [445] [444] [443] [442] [441] [440] [439]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

正月頃にCMでチラ見していた1,1,5,8で四則演算使って10を作る話です。
先日の仕事中(!)に、そういえばーと思って解いてみました。

た・だ・し!

正直、ああいうのを延々考えるのは性に合いません!(断言)
そんなわけで、Excelマクロで解くプログラムを書き上げました。
20分ほどでプログラム書けたよ! 答えが出るのは一瞬だったよ!

まぁ、試行回数を考えたら一瞬だよね!
1158の並び替え:4×3×2(重複あるので)÷2=12通り
四則演算子:4の三乗=64通り
計算優先の()を付けるパターン:()なし含めて6通り

試行回数:12×64×6=4608 ←楽勝!

パズルとしての本来の目的からはかけ離れてるかもしれないけど、ほら、頭はちゃんと使ったよ!

ついでなので、プログラムと回答を晒しておきます。

拍手[0回]




①準備するもの…ExcelがインストールされてるPC
②Excelのシートに、以下のように1158の並び替えパターンを入力しておく。
   
③ ②で入力したシートに、以下のようなマクロを記載。
Sub test()
    Dim intRow As Integer
    Dim A, B, C, D As Integer
    Dim i, k, m, n As Integer
    Dim strFormula As String
    Dim arrSan(1 To 4)
    
    arrSan(1) = "+"
    arrSan(2) = "-"
    arrSan(3) = "*"
    arrSan(4) = "/"
    
    intRow = 1
    
    Do While Me.Cells(intRow, 1) <> ""
        A = Me.Cells(intRow, 1).Value
        B = Me.Cells(intRow, 2).Value
        C = Me.Cells(intRow, 3).Value
        D = Me.Cells(intRow, 4).Value
        
        For i = 1 To 4
            For k = 1 To 4
                For m = 1 To 4
                    For n = 1 To 6
                        Select Case n
                            Case 1
                                strFormula = "=" & A & arrSan(i) & B & arrSan(k) & C & arrSan(m) & D
                            Case 2
                                strFormula = "=(" & A & arrSan(i) & B & ")" & arrSan(k) & C & arrSan(m) & D
                            Case 3
                                strFormula = "=" & A & arrSan(i) & B & arrSan(k) & "(" & C & arrSan(m) & D & ")"
                            Case 4
                                strFormula = "=(" & A & arrSan(i) & B & ")" & arrSan(k) & "(" & C & arrSan(m) & D & ")"
                            Case 5
                                strFormula = "=(" & A & arrSan(i) & B & arrSan(k) & C & ")" & arrSan(m) & D
                            Case 6
                                strFormula = "=" & A & arrSan(i) & "(" & B & arrSan(k) & C & arrSan(m) & D & ")"
                        End Select
                        
                        Me.Cells(1, 6).Formula = strFormula
                        
                        If Len(Me.Cells(1, 6).Text) = 2 Then
                            If Me.Cells(1, 6).Value = 10 Then
                                MsgBox strFormula
                            End If
                        End If
                    Next
                Next
            Next
        Next
    
    
        intRow = intRow + 1
    Loop
End Sub
④上記のコードを実行する
 ※Excelでマクロを書く方法は適当に探してください。

面倒なのでプログラムにコメントもないし、解説するわけでもないですが、
1.計算式を総当たりで生成し、
2.F1セルに突っ込んで計算させ
3.それが10かどうかを確認する
だけのシロモノです。

ちなみに解答は
8÷(1-1÷5)
になりました。
PR


忍者ブログ [PR]
twitter
カレンダー
12 2025/01 02
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
最新記事
ブログ内検索
バーコード