Supposing a multi-player game, what you be the fairest way give final scores based on the previous scores of all players.
For example, in a two player match, player A having two times the score of player B. "A" finishing first would not give him a lot of points; finishing last, he would lose quite a lot of points.
Microsoft has a pretty cool rating system that I have in my queue to implement someday. It is called TrueSkill. It lets you adjust ratings for players in head to head and when on teams. You can read about it here: http://research.microsoft.com/en-us/projects/trueskill/details.aspx
The advantage is that it is supposed to gravitate towards your True Skill quickly (usually in 20 games or less). The disadvantage is that it is quite complicated.
The ELO System (and others like it) have a disadvantage in that they suffer from a problem called point inflation. For example, if 1500 is intended to mean the average player, over time that will no longer be the case. With enough games, the true average (for the population as a whole) will eventually increase. Thus, the average player really may be 1600 but the intent was for 1500 to be average. Thus, many average players think they are better than they are:).
However, the advantage of the ELO system is that it is very easy to calculate.