for (i = 0; i < FACES; i++)
if (facesInHand[i] > 0)
highest = i;

How about starting the loop with the highest face and search backwards?


i = FACES - 1;
while (facesInHand[i] ==...