タイトル:1037年ホグワーツでの変化を探して(20ポイント)
あなたはハリーポッターのファンなら、あなたは魔法の世界は、独自の金融システムを持って知っているよ-ハグリッドがハリーに言ったとおり「セブンティーンシルバーシックルズ(鎌)ガレオン(ガレオン)に対して、西に対する二十から九ナース(クヌートは)非常に簡単にすることができます。「今、ハリーが支払う価格与えられたPを、彼が実際にお金を支払った、あなたのタスクは、彼が探しているしなければならない計算するプログラムを書くことです変更。
入力フォーマット:
図1に示すように、入力ラインに与えられているP及びA、フォーマット
Galleon.Sickle.Knut
隙間によって分離され、。ここではGalleon
[0、1 0 。7 の整数〕間隔は範囲[0、17)の範囲内の整数であり、範囲[0、29)セクション内の整数です。Sickle
Knut
出力フォーマット:
同じ入出力フォーマットに沿って、ハリーは、変更を探しているべきです。彼は十分なお金を持っていなかった場合、出力は負でなければなりません。
サンプル入力1:
10.16.27 14.1.28
出力サンプル1:
3.2.1
サンプル入力2:
14.1.28 10.16.27
出力サンプル2:
-3.2.1
アイデア:
- 計算する最小単位に変換し、最終的に削減ユニット。
- また、全ての整数の上限を超えて処理の最小単位の観点ことに注意。それは純粋なint型ではありません。
コード:
1の#include <cstdioを> 2の#include <CStringの> 3の#include <iostreamの> 4の#include <sstream提供> 5の#include <cmath> 6の#include <アルゴリズム> 7の#include < ストリング > 8の#include <積層> 9#含む<キュー> 10の#include <ベクトル> 11の#include <地図> 12 使用 名前空間STDを、 13 14 のint main()の 15 { 16 長い INT G1、G2、S1、S2、K1、K2。 %のLD%のLD%のLD%のLD%のLD%のLD。。。。"、&G1、&S1、&K1、&G2、&S2、&K2); 18 = G1 K1 * 17 * 29 + S 1 * 29 + K1、 19 K2 = G2 * 17 * 29 + S2 * 29 + K2; 20 長い INT サブ; 21 サブ= K2 - K1、 22 であれば(サブ< 0 ) 23 { 24 サブ= - サブ; 25 のprintf(" - " ); 26 } 27 のint G、S、K。 28 G =サブ/(17 * 29 )。 29個の S =副%(17 * 29)/ 29 。 30 K =副%(17 * 29)%29 。 31 のprintf(" %D%のD%のD。" 、G、S、K)。 32 リターン 0 。 33 }
要約:
私はこの質問は実際に最小単位が、暴力列挙の面で最初に考えていないですが、結果はテストポイント2,4で見ました。突然単位の大きさの点では、この問題を考え、他の人のアイデアを読んだ後の方法は、 - 最も簡単であると言うことはできませんが、より便利な方法は、最小単位で、最終的に復元することが単位の面で絶対的に統一されます。