There can be only one gold, one silver, and one bronze user, and they obviously can't be the same person. Radio buttons, being the standard 'there can be only one' control is the obvious choice.
First, you can't 'Turn off' a radio button. In the case of accidentally choose a 'Gold' winner, a set of radio buttons provides no clear way to give the input of 'whoopsie, I didn't mean to select that person as a winner!'
Second, the choice needs to be locked out in two dimensions. You can't have two Gold winners and you can't have a single winner with more than one type of win. This means we need a logic-puzzle grid, where only a single choice can be made in a column and row.
(taken from logic-puzzles.org)
The above is a common logic puzzle 'control', where when one item in a box is true, none of the other items in the same row or column can be true. If we adapt that control to a prize selection screen, we get something a bit like this:
download bmml source – Wireframes created with Balsamiq Mockups
In this mockup, selecting one item disables the checkboxes in the same column (only one Gold prize) and row (only one prize per entry); notice how the other checkboxes in the same row and column become disabled (faded) when one is chosen. If you make a mistake, you can uncheck the box which will return the blocked checkboxes to being enabled.
This interface clearly indicates when a choice is prevented due to a conflicting selection that has already been made. This gets more important when your list of potential winners cannot all be displayed on one screen. Context is lost when you scroll down, but the disabled buttons prevent a user from accidentally making a conflicting choice.