トップページに戻る
次の競技プログラミングの問題へ
前の競技プログラミングの問題へ
ABC-068-B Break Number
■■■問題■■■
高橋君は2で割れる数が好きです。
正整数Nが与えられるので、
1以上N以下の整数のうち、最も2で割れる回数が多いものを求めてください。
答えは必ず1つに定まります。
なお、2で割っていき、何回あまりが出ずに割れるかを、2で割れる回数と呼ぶことにします。
例えば
●6ならば、6 -> 3で、1回 2で割れます。
●8ならば、8 -> 4 -> 2 -> 1で、3回 2で割れます。
●3ならば、0回 2で割れます。
■■■入力■■■
N
●1 <= N <= 100
■■■出力■■■
問題の答えを出力する。
C#のソース
using System;
using System.Collections.Generic;
class Program
{
static string InputPattern = "Input1";
static List<string> GetInputList()
{
var WillReturn = new List<string>();
if (InputPattern == "Input1") {
WillReturn.Add("7");
//4
//4は2回 2で割ることができ、
//これは 1, 2, ・・・ 7 の中で最も多いです。
}
else if (InputPattern == "Input2") {
WillReturn.Add("32");
//32
}
else if (InputPattern == "Input3") {
WillReturn.Add("1");
//1
}
else if (InputPattern == "Input4") {
WillReturn.Add("100");
//64
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
int N = int.Parse(InputList[0]);
if (N >= 64) { Console.WriteLine(64); return; }
if (N >= 32) { Console.WriteLine(32); return; }
if (N >= 16) { Console.WriteLine(16); return; }
if (N >= 8) { Console.WriteLine(8); return; }
if (N >= 4) { Console.WriteLine(4); return; }
if (N >= 2) { Console.WriteLine(2); return; }
if (N >= 1) { Console.WriteLine(1); return; }
}
}
解説
2の累乗数を列挙してます。