バックグラウンド
Golfenistanの架空の国の公式通貨はfooであり、流通しているコインは3種類、3 foo、7 foo、8 fooのみです。これらのコインを使用して、4 fooなどの特定の金額を支払うことは不可能であることがわかります。それでも、十分な量をすべて形成できます。あなたの仕事は、コインでは形成できない最大量(この場合は5 foo)を見つけることです。これはコイン問題として知られています。
入力
入力は、流通しているコインの価値を表す正の整数のリストです。次の2つのことが保証されています。L = [n1, n2, ..., nk]
- の要素のGCD
L
は1です。 L
番号1は含まれません。
ソートされていないか、重複している可能性があります(特別版のコインを考えてください)。
出力
のGCD L
は1 なので、十分に大きい整数m
はすべて、その要素の非負の線形結合として表現できます。言い換えれば、
m = a1*n1 + a2*n2 + ... + ak*nk
一部の整数の場合。出力は、この形式では表現できない最大の整数です。ヒントとして、およびが(reference)の最大要素と最小要素である場合、出力は常により小さいことが知られています。ai ≥ 0
(n1 - 1)*(nk - 1)
n1
nk
L
ルール
完全なプログラムまたは関数を作成できます。最小のバイトカウントが優先され、標準の抜け穴は許可されません。あなたの言語がこのための組み込み操作を持っている場合、あなたはそれを使用してはいけません。回答を投稿する前にテストケースを評価できる必要があることを除いて、時間やメモリの効率に関する要件はありません。
このチャレンジを投稿した後、ユーザー@vihanはStack Overflowに完全な重複があることを指摘しました。このMetaディスカッションに基づいて、このチャレンジは重複として削除されません。ただし、SOバージョンの回答に基づくすべての回答は、オリジナルを引用し、コミュニティWikiのステータスを付与し、オリジナルの著者が回答をここに投稿したい場合は削除するようお願いします。
テストケース
[3, 7, 8] -> 5
[25, 10, 16] -> 79
[11, 12, 13, 14, 13, 14] -> 43
[101, 10] -> 899
[101, 10, 899] -> 889
[101, 10, 11] -> 89
[30, 105, 70, 42] -> 383
[2, 51, 6] -> 49
[2,3]
妥当な時間内に他に何もできない13バイトのPythソリューションがあります。[2,5]
メモリ内に約100万のPythonリストを作成します。
FrobeniusNumber
Mathematicaで。