頭の体操
算数にチャレンジ!! 第624回問題(11月27日〜 12月 3日) 1〜512の数の書かれたカードが1枚ずつ、左から小さい順に、「1,2,3,4,・・・,511,512」と並んでいます。いま、次のような作業を行うことにします。 ア. 前から奇数番目のカードをすべて取り除く イ. 前から偶数番目のカードをすべて取り除く まず、この作業を、ア→イ→ア→イ→・・・の順に、カードが残り1枚になるまで繰り返して行うことにします。 このとき、最後に残るカードに書かれた数字を答えてください。
上の問題を見つけて、頭の体操がてらにjavaでやってみました。
import java.util.ArrayList; public class Q624 { public static void main(String args[]) { ArrayList<Integer> cards = new ArrayList<Integer>(512); for(int i = 0; i < 512; i++) cards.add(i,i+1); for(int j = 0; cards.size() != 1; j++) for(int k = j % 2; k < cards.size(); k ++) cards.remove(k); System.out.println(cards.get(0)); } }
素直な方法でやってみました。
ちなみに人力で解いた方法は別で、それをコードにしてみようと思いましたが、そっちは汎用的にする方法が思いつかず、断念。