頭の体操

算数にチャレンジ!!
第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));
    }
}

素直な方法でやってみました。
ちなみに人力で解いた方法は別で、それをコードにしてみようと思いましたが、そっちは汎用的にする方法が思いつかず、断念。