4つの数字を、四則演算「+」「-」「×」「÷」を使って、

10になるか、ならないかのアルゴリズムを知っている人がいたら、
教えてください。
(÷で余りが出る場合は、NGとする)

簡単に言うと、
電車の切符の4つの数字で、
10にするときのアルゴリズムを知りたいと思っています。
よろしくおねがいしますm(_ _)m

回答の条件
  • 1人2回まで
  • 登録:2008/04/29 16:05:20
  • 終了:2008/05/06 16:10:02

回答(3件)

id:sushi0 No.1

sushi0回答回数66ベストアンサー獲得回数132008/04/29 17:33:47

ポイント27pt

python:計算パズルとpython - 清水川Web

http://www.freia.jp/taka/blog/28

perl:4桁の数字を10にする証明 - めも日記

http://www.noppi.jp/diary/?date=20040828#p02

C++ : 4けたの数字を10にするプログラム in C++版・もけっけさんの本 Part3 - めも日記

http://www.noppi.jp/nicky/nicky.cgi?DT=20040829A#20040829A

Oracle, .net:4 つの数字から四則演算のみで 10 を作る方法 [テンパズル]

http://blogs.wankuma.com/jeanne/archive/2006/09/19/39079.aspx

ruby:切符問題 - バリケンのRuby日記

http://rubyist.g.hatena.ne.jp/muscovyduck/20060909

Scheme:Island life

http://www.lava.net/~shiro/Private/diary/0112.html

早稲田大学の課題 - 切符の番号で10を作る -

課題 http://www.kashi.info.waseda.ac.jp/~kashi/lec1999/jsj99/make10.h...

レポート http://www.kashi.info.waseda.ac.jp/~kashi/lec1999/jsj99/rep2/

とりあえず検索で引っかかったところで、中身は読んでないのですが、

このあたりを参考にされてはいかがでしょうか。

id:kmon No.2

kmon回答回数27ベストアンサー獲得回数52008/04/29 17:42:26

ポイント27pt

以下に説明するアルゴリズムは、M.Hiroiさんのホームページで昔読んだものです。(今確認のために見に行ったところ、該当のページが見つかりませんでした。トップページのアドレスを最後に書いておきます。)

ここでは、数字4桁を与えられたとして、可能性のある式を総当たりで生成して、実際に10になる式を見つけることになります。


  1. 4桁の数字を収める変数を、n1, n2, n3, n4 とします。
  2. 演算子(「+」「-」「×」「÷」のどれか1つ)を収める変数を3つ用意します。各々k1, k2, k3とします。
  3. 7つの変数を、n1, k1, n2, k2, n3, k3, n4という順番に並べて1つの式を生成します。(例えば、(n1, n2, n3, n4)=( 1, 2, 3, 3), (k1, k2, k3)=(+, -, *)とすると、"1+2-3*3"という式が生成されます。)
  4. 生成した式を実際に計算し、結果が10になるものだけ表示します。(計算する部分は途中まで分数で計算しておいて、最後約分するようにします。整数にならなければアウトですので、次に行きます。)
  5. 2.から4. までを演算子の組み合わせ分繰り返します。

補足:

・先頭の数字の前に、単項演算子のマイナスを許す場合は、演算子を収める変数を1つ増やします。

・数字の合体(2,2と並んだら「22」と読むこと)を認める場合は、演算子に特殊な記号のものを付け加えて、式を計算するときに対応します。


M.Hiroi's Home Page:

http://www.geocities.jp/m_hiroi/

id:hiyarihatto

回答ありがとうございます。

この場合ですと、( )の計算はロジックに含まれていなそうですが、参考になりました

2008/05/02 03:17:55
id:taknt No.3

きゃづみぃ回答回数13539ベストアンサー獲得回数11982008/04/29 21:02:43

ポイント26pt

大きな外枠のループとして1から9まで 9回ループさせます。

それから1から4で 3重ループさせます。

そのループの値が

1のときは「+」

2のときは「×」

3のときは「-」

4のときは「÷」

で計算させ、その結果が 10だったら、それを解答とします。

エクセルのVBAで作ってみました。

これで11、解答が出ました。

Sub Macro1()
d = 1
For a = 1 To 9
    For c1 = 1 To 4
        For c2 = 1 To 4
            For c3 = 1 To 4
                Select Case c1
                    Case 1
                       b = a + a
                    Case 2
                       b = a * a
                    Case 3
                       b = a - a
                    Case 4
                       b = a / a
                End Select
                
                Select Case c2
                    Case 1
                       b = b + a
                    Case 2
                       b = b * a
                    Case 3
                       b = b - a
                    Case 4
                       b = b / a
                End Select
                
                Select Case c3
                    Case 1
                       b = b + a
                    Case 2
                       b = b * a
                    Case 3
                       b = b - a
                    Case 4
                       b = b / a
                End Select
                
                If b = 10 Then
                   Cells(d, "A") = a
                   Cells(d, "B") = Mid("+×-÷", c1, 1)
                   Cells(d, "C") = a
                   Cells(d, "D") = Mid("+×-÷", c2, 1)
                   Cells(d, "E") = a
                   Cells(d, "F") = Mid("+×-÷", c3, 1)
                   Cells(d, "G") = a
                   d = d + 1
                   
                End If
            
            Next c3
        Next c2
    Next c1
Next a
End Sub
  • id:taknt
    左から右に計算で 計算の優先順位は 無視です。
    ま、()をつければいいのですが・・・。
  • id:ardarim
    昔戯れでやってみたことがありますが、ポーランド記法で考えるとカッコをケアする必要が無くて処理が割と単純にできたはずです。
  • id:taro56
    このページを大参考にして、VB2010でソフトを作ってみました。
    よかったらお試しください↓↓↓。

    http://p56.org/p56ln/soft/300.html

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません