ベース2に変換されないこの問題の戦略を見つけることができますか?あなたはコードを書く必要はありません、ただ私に一般的な戦略を与えてください。ロック、紙「としても知られている( 『Javaのベース2コードクエリの戦略が必要
ラウンド番号
牛、あなたが知っているように、何の指や親指を持っていないので、はさみを再生することができない、紙、石、はさみ』、」Roを、シャム、Bo 'などの名前のホスト)を使用して、誰が最初に搾乳されるような恣意的な決定を下すことができます。彼らは足を使って投げるのは難しいので、コインを裏返すことさえできません。
こうして彼らは「丸数字」マッチングに頼った。最初の牛は20億以下の整数を選ぶ。 2番目の牛も同じです。数字が両方とも「丸数字」である場合、最初の牛が勝ち、それ以外の場合は2番目の牛が勝つ。
正の整数Nは、Nの表現のバイナリが1を持つよりも多くのゼロを持つ場合、「丸数字」と呼ばれます。たとえば、整数9は、バイナリ形式で記述されている場合、1001です。1001には2つのゼロと2つの1があります。従って、9は丸数字である。整数26は2進数で11010です。それは2つのゼロと3つのものを持っているので、それはラウンドナンバーではありません。
もちろん、それはバイナリに番号を変換するために、牛には時間がかかるので、 勝者が決定するためにしばらく時間がかかります。 Bessieは不正行為をしたいと思っており、与えられた範囲内にいくつの「丸数字」があるか知っていれば、彼女はそれを行うことができると考えています。
入力(1 < =開始<完了< = 2,000,000,000)によって与えられる包含的な範囲に表示される丸数字の数を示すプログラムを書くことによって彼女を助けてください。それぞれ二つのスペースで区切られた整数、スタートとフィニッシュ:
入力(rndnum.in) 1行目。
出力(rndnum.out) 行1: 包含範囲内のラウンド番号のカウントである単一の整数Start..Finish
サンプル入力
サンプル出力
なぜベース2に変換しませんか?コンピュータはすべての数字をベース2に内部的に保存するので、何かを遅くすることはありません。 –
ベース2を変換しようとしましたが、速度が遅すぎます(入力範囲は1〜2,000,000,000にしてください)。すべての整数を計算して基数2に変換する必要がある場合、非常に長い時間がかかります(10秒以上)。 –
私はあなたが離散数学を勉強するのに少し時間を投資することを強くお勧めします。これは制約を伴う置換問題です。 –