A308432 Given n cards in a stack numbered from 1 to n with 1 at the top, repeat the following process: first remove the card that is in the middle (at position (size of the stack)/2, rounding up), then move the card that is at the bottom of the stack to the top. This process is repeated until there is only one card left. a(n) is the number of the last remaining card.
1, 2, 1, 4, 4, 4, 3, 2, 1, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12
Offset: 1
Keywords
Programs
-
C
//pow3 is a vector where pow3[n] = 3^n int f(int n){ int x = 0; while(pow3[x+1] <= n) x++; return x; } int a(int n){ int fn = f(n); if(n == pow3[fn]){ return 1; }else if(n<=(pow3[fn]<<1) && n!=pow3[fn]){ return pow3[fn]+1; }else{ return pow3[fn+1] - (n-1); } }
Formula
Let t = 3^floor(log_3(n)); then
a(n) = 1 if n = t,
t + 1 if n <= 2*t and n != t,
3*t - n + 1 otherwise.
Comments