C#で解く数学パズルの数々
Qiitaに掲載した数学パズルのソースコードを公開しています。
1~9までの数字を1回だけ使って帯分数をつくり、その値が100を表すようにするパズルです。
n倍して桁が巡回する自然数を求めてください。 nは、2 <= n <= 9 とします。この時の自然数を巡回数と言います。 例えば、1234の場合は、2倍した値が、2341, 3412, 4123 のいずれかになれば、巡回すると言えます。実際には、2倍した値は2468なので、巡回はしません。
4桁の数値を順序を逆転させた数値(例えば、5432の場合は2345が逆転させた数値)で割ったときに、割り切れる4桁の数を求める。 (5432 / 2345 は割り切れないので求める答えではない) ただし、商が1のものや、割る数が4桁でないものは除外する。
「○○ − ○ = ○○ / ○ = ○ + ○ × ○ 」の○の部分に、1から9までの数がひとつずつ入るようにするパズル。
ある整数 N を素因数分解したときに、因数が1-9をひとつずつ使っている Nを求めよ。それぞれの因数は、100未満とする。 ただし、求める N は、intで表現できる数とする。
1~9までの数字と+、-、×、÷ の記号を使って、計算結果が100になる式を作る数学パズルです。 Roslynを使って動的に作成したC#のコードをコンパイルすることで、数式の計算を行っています。
以下のような5つの円に1-9までの数を入れ、どの円の中も合計すると同じ数になるように、数を埋めるというパズルです。左右の円は2つの合計、それ以外は3つの合計です。
3桁の数値とその数値を2乗した値の各数字が1から9までのすべての数字で構成されるような3桁の数値をすべて求める。
単位分数が、1/n となる、1-9までの数を1回ずつ使った分数を求めています。 ただし、n は、2から 9までの数です。 たとえば、6729/13458 は、1/2かつ1-9までの数を1回ずつ使っているので、求める答えのひとつです。
マジックスターは、星型に並べた12個の○に 1から12までの数字をひとつずつ入れていき、直線上の4個の数字の合計が、すべて 26 になるように、数字を配置するというものです。
N-Parastic Numberを求めてください。
N-Parastic Number: ある正の整数 A を N(1<=N<=9)倍した値と、Aを右へ一桁分ローテートシフトした値が等しい数。例えば、N=4 の時、102564 は 102564 * 4 = 410256
となり、N-Parastic Numberとなります。
二乗すると回文数となる数で、二乗する前の数が回文でない正の整数を求める。 回文数とは、21512 のように、逆から読んでも同じ数になる数字のことです。
積み上げたコインを以下の手順でひっくり返すと何回目で初期状態に戻るかというもの。
- n枚のコインを全部表にして積み上げる
- 最初に、上の1枚を裏返す。次に上から2枚目をまとめてひっくり返す。次に3枚、4枚とひっくり返す。
- n枚全体をひっくり返したら、また1枚に戻る。 この手順を繰り返す。
リング状に1から8の数字が並んでいます。 1から8までの任意の数字からはじめ、右回りあるいは左回りに数字を取り出し8ケタの数字を作ります。 全部で16個の数字が得られますが、この最大公約数を求めてください。
素数を逆転させた数もまた素数である自然数のことを 「エマープ(Emirp)」と言います。 1479のように、左から右へどんどん大きな数字になってゆく数を「上昇数」と呼びます。 このエマープかつ上昇数を求めています。
以下の3つの条件を満たしたものをステインハウスの三角形と言う。
- この三角形は以下のように0と1から成っている。
- m行目はm-1行目の隣同士の数字の排他的論理和となっている。
- 三角形内の 0 の数と1の数が同じである。
三角形の辺の長さ n を与えられた時、すべてのステインハウスの三角形を描くプログラムを書け。
以下のような○を組み合わせた逆三角形に「横に並んだ2つの数の差(正数)をその下の○に入れる」という条件を満たして、1~nまでの数字を配置します。 例えば、3段の三角形の場合は、以下のように 1~6までの数を入れれば、条件を満たせます。
では、5段の三角形の場合は、どのように配置すれば良いのか考えてください。