|
1: 2016-07-26 (火) 21:14:22 osinko |
| + | TITLE:式木、二項演算、括弧のネスト処理 |
| + | **式木、二項演算、括弧のネスト処理 [#a7139d8b] |
| | | |
| + | ネットをぶらぶら散策していると面白い問題を見つけた。以下のリンクのページにその問題はある |
| + | [[MSX_Magazine_1991-12_ASCII_JP:https://archive.org/stream/MSX_Magazine_1991-12_ASCII_JP#page/n93/mode/2up]] |
| + | 論理や算術演算を自動生成して目的に合わせ問題を解くという問題のようだ。非常に興味深いのでちょっと考えてみる事とする |
| + | |
| + | ***問題 [#cf6bd2ed] |
| + | 0000~9999までの4桁の数の間に四則演算を入れて10が作れないものはいくつあるか?プログラムで求めよ |
| + | |
| + | <ルール> |
| + | ①+-×÷の記号のみ使用できる事とする。ルートやべき乗は使用不可 |
| + | ②計算は一般の式と同じ順序で行う(×÷が優先、左から右に計算する) |
| + | ③()は使用できる |
| + | ④最初の数字の頭に-を付けて負の数にすることは出来る |
| + | ⑤数字の並べ替えは出来ない |
| + | ⑥二つ以上の連続する数字をまとめて2桁以上の数として扱うことは出来ない |
| + | |
| + | |
| + | ***①と②について [#f61c996d] |
| + | -算術演算処理(calculate)には二項演算の二分岐、式木の仕組みを利用してプログラム処理する |
| + | |
| + | ***③について [#uc05ee4d] |
| + | -括弧を使ったネストのある数式を解析処理(Parse)する必要がある |
| + | -全ての論理式は同じ個数の右括弧と左括弧を持つ。片方の括弧が多いという式は成立できないので処理しない |
| + | -考えられる括弧式を抽出してリスト化。式木をあらかじめ組んで個別に処理する方針で行く |
| + | |
| + | ***④⑤⑥について [#sf2a74f5] |
| + | -四則演算子+-×÷は算術演算子でもあり二項演算子である。A×BやA+Bのように二項の演算を扱う |
| + | -+-は単項演算子でもある。-xは単項で負符号を表す。x-yは二項演算。-x-yはこれら機能が複合している |
| + | -+は省略できるが、-は省略できない |
| + | |
| + | 解決方法 |
| + | 最初の数字を整数Z。2番目以降を自然数として扱い処理することで解決する |
| + | |
| + | \(a\cdot b\cdot c\cdot d\)の四則演算に対して\(-a\cdot b\cdot c\cdot d\)のケースの為に |
| + | \(a=\left\{ \quad k\quad |\quad -9\le k\le -1\quad ,\quad 1\le k\le 9\quad \right\} \\ b,c,d=\left\{ \quad k\quad |\quad 1\le k\le 9\quad \right\} \) |
| + | とする |
| + | |
| + | **掘り下げて考える [#d975c324] |
| + | |
| + | 難しいのは「①と②について」と「③について」の問題となっている。 |