質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

364閲覧

1~9までの四則演算について

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/05/19 08:09

前提・実現したいこと

1~9までの数字を
(1*2*3+456ー78)/9
のように数字の順番を変えず
全ての組み合わせを四則演算するプログラムを作成しようと思っています。

456、78のように数字が連続した部分を
どうやって実装すればよいか分かりませんでした。

お助けいただけると大変助かります。よろしくお願いいたします。

補足情報

膨大な数になると思います。
python3.6

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

回答ではなくコメントです。

とりあえずプログラムを書く前に考えてみると、
1~9の数ですから、8箇所切れる場所があります。あとはこれの組み合わせですから、結果的にできる数字の数をnとすると
8C(n-1)
で「数字の切り分けの組み合わせの数」は計算できます。nを2から9とすると

python

1>>> from scipy.special import comb 2>>> for n in range(2, 10): 3... print(n, comb(8, n-1, exact=True)) 4... 52 8 63 28 74 56 85 70 96 56 107 28 118 8 129 1

あとは四則演算なので、4^(n-1)が各数字にかかります。

python

1>>> for n in range(2, 10): 2... print(n, comb(8, n-1, exact=True)*(4**(n-1))) 3... 42 32 53 448 64 3584 75 17920 86 57344 97 114688 108 131072 119 65536

まあ、合計でざっと30万強になるようですね! ただしかっこは面倒くさいので無視。

ループで書いてもできるでしょうし、itertools.combinationsとか使っても良いでしょう。

投稿2018/05/19 08:33

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/05/19 08:39

ご回答ありがとうございます。 実は、30万強すべての回答を集めたいと考えております。
hayataka2049

2018/05/19 08:49

私が書くなら、こんな感じですかねぇ(擬似コード) n=2の場合,3の場合,...9の場合のループを回す  itertools.combinationsで切り得る場所の組み合わせの一覧を調べ、それでループする   4^(n-1)の可能な四則演算の組み合わせを列挙してループ    計算してリストか何かに放り込む まあ、やればできるはずです
退会済みユーザー

退会済みユーザー

2018/05/19 09:25

頑張ってやってみます!
guest

0

色々方法があるとおもいます。

各桁を文字で表現したとして

Python

1digits = '123456789' 2 3# i番目からj番目の前までを取り出す 4i, j = 2, 4 5digits[i:j] # '34' 6 7# それを整数に変換 8int(digits[i:j]) # 34

各桁をひとつづつ整数としてリストに置いておくと

python

1digits = [*range(1, 10)] 2 3# i番目からj番目の前までを取り出す 4i, j = 2, 4 5digits[i:j] # [3, 4] 6 7# それを各桁とする整数値に変換 8import functools 9 10functools(reduce(lambda a, b: a * 10 + b, digits[i:j], 0) # 34

などなど・・・

なんとなく、問題そのものが完成するかどうかに関係なく、それをするために使う個々の処理のやり方をあれこれ調べたり考えたりすることが役立つ気がします。


python 3.6

投稿2018/05/19 08:31

編集2018/05/19 08:33
KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/05/19 09:05

各桁を文字で表現する方法は、大変シンプルで勉強になります。 なぜ僕は、こんな簡単なことが分からなかったんだろうと思いました。 ご回答ありがとうございました。
KSwordOfHaste

2018/05/19 09:07

それが普通だと思います。自分だってPythonを習い始めのころは本サイトで他の方々がマジックのようなコードを書いておられるのを見て感心してばかりいました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問