A line of 100 airline passengers is waiting to board a plane. they each hold a ticket to one of the 100 seats on that flight. (for convenience, let’s say that the nth passenger in line has a ticket for the seat number n.)
Unfortunately, the first person in line is crazy, and will ignore the seat number on their ticket, picking a random seat to occupy. all of the other passengers are quite normal, and will go to their proper seat unless it is already occupied. If it is occupied, they will then find a free seat to sit in, at random.
What is the probability that the last (100th) person to board the plane will sit in their proper seat (#100)?
Solution
I haven’t written up a solution for this yet, but smarter people than I have described some on the discussion forum. You can read their thoughts here.
2026 Update: The Airplane Seat Problem — A Probability Classic
The Crazy Passenger problem is one of the most elegant probability results in interview mathematics: 100 passengers board a plane in order; the first sits in a random seat; every subsequent passenger either takes their assigned seat (if available) or a random free seat. What is the probability the last passenger gets their own seat? Answer: exactly 1/2, regardless of the number of seats.
The elegant proof: At any point in the boarding process, the “displacement chain” can only resolve in one of two ways — the last seat taken is either seat 1 (first passenger’s seat) or seat 100 (last passenger’s seat). Both outcomes are equally likely at every step. No other resolution is possible.
Python simulation to verify:
import random
def airplane_simulation(n=100, trials=100_000):
wins = 0
for _ in range(trials):
seats = list(range(n))
random.shuffle(seats[:1]) # Passenger 1 takes random seat
taken = {random.randint(0, n-1)} # Passenger 1's choice
for passenger in range(1, n):
if passenger not in taken:
taken.add(passenger) # Takes own seat
else:
# Takes a random free seat
free = [s for s in range(n) if s not in taken]
taken.add(random.choice(free))
wins += (n - 1) in taken # Did last passenger get seat n-1?
return wins / trials
print(f"P(last passenger gets own seat): {airplane_simulation():.4f}") # ~0.5000
Why this is still asked in 2026: The problem tests whether you can reason about probability without brute-forcing all cases. The key insight — reducing the problem to a binary outcome — is the same type of reasoning used in distributed systems consensus proofs and randomized algorithm analysis. Asked at Jane Street, Two Sigma, and Google.