Hola,
Un algoritmo posible podría ser éste:
Entrada
m : cantidad de participantes
n : cantidad de jueces
puesto(i,j) : puesto que ocupa el participante i según el juez j (matriz mxn)
Salida
ganador_puesto(i) :
número del participante que salió en el lugar i en la competencia
de esta manera, ganador_puesto(1) es el que salió en primer lugar,
ganador_puesto(2) el que salió en segundo lugar, etc
Estructuras auxiliares
puntaje(i) : representa la suma de los puntos que obtuvo el participante i
nro_puestos(k, i) : número de puestos k que obtuvo el participante i (matriz nxm)
Funciones auxiliares
bool ganador(pos, i, j)
if nro_puestos(pos, i) > nro_puestos(pos, j)
return true
else if nro_puestos(pos, i) == nro_puestos(pos, j)
return ganador(pos-1, i, j)
else
return false
end if
end
(Devuelve verdadero si el participante i tuvo más puestos pos que el participante j)
Inicialización
-puntaje(i) y nro_puestos(k,i) se inicializan con todos ceros.
-ganador_puesto(i) se inicializa con (1,2,...,m)
Algoritmo
for i=1..m
for j=1..n
puntaje(i) := puntaje(i) + puesto(i,j)
nro_puestos(puesto(i,j), i) := nro_puestos(puesto(i,j), i) + 1
end for
end for
Al final se ordenan los índices usando el algoritmo de la burbuja (podría usarse otro, pero dado que se manejan números chicos, no hay problemas de eficiencia):
for i=1..m
for k=1..(m-i)
if ( puntaje(k) > puntaje(k+1) || (puntaje(k) == puntaje(k+1) && ganador(1,k+1,k)) )
intercambiar(ganador_puesto,k,k+1)
end if
end for
end for
Saludos