Ahh accountants can do anything with figures and being a banker/accountant I am partial to this one:
They have collectively paid 27 dollars for the room, since the coke drinker took $2 and the actual cost was $25. And so we see that there is no missing dollar, because the $27 the men paid is a debt, written as a negative number, and the $2 the coke drinker took is a profit, which is a positive number, and the sum is not $29, but a debt of $25, which was paid to the hotel. Easy, I think
Or the way I explain it to my kids:
If you give each of the $30 a number from 1-30 to keep track of each individual dollar.
Dollars numbered 1-30 are given to the hotel and the desk gives $5 back, so the hotel keeps the dollars numbered 1-25, and gives numbers 26-30 to the coke drinker who then gives numbers 26, 27 and 28 to the himself and the two friends and uses numbers 29 and 30 to buy a coke.