Ocena użytkownikóww: ***** / 2
Nadesłany przez Tomasz Lubiński, 01 marca 2006 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
dHondt.java:
/**
* Algorytm d'Hondt'a
*
* www.algortym.org
* (c)2006 Tomasz Lubinski
*/
public class dHondt {
private static float calcNewValue(int votes, int mandates)
{
return (float) ((votes*1.0) / (mandates + 1.0));
}
/**
* @param args
*/
public static void main(String[] args) {
int mandates[];
int votes[];
float calcTab[];
float max;
int groupCount, mandatesCount, maxInd = 0;
//get all data
System.out.println("Podaj liczbe partii");
groupCount = Console.readInt("?");
//initialize all tables
mandates = new int[groupCount];
votes = new int[groupCount];
calcTab = new float[groupCount];
System.out.println("Podaj liczbe mandatow");
mandatesCount = Console.readInt("?");
for (int i=0; i<groupCount; i++)
{
System.out.println("Podaj liczbe glosow na partie " + (i+1));
votes[i] = Console.readInt("?");
}
//clear number of mandates
for (int i=0; i<groupCount; i++)
{
mandates[i] = 0;
}
//calculate mandates (d'Hondt)
for (int i=0; i<groupCount; i++)
{
calcTab[i] = votes[i];
}
for (int i=0; i<mandatesCount; i++)
{
//find max
max = -1;
for (int j=0; j<groupCount; j++)
{
if (max<calcTab[j])
{
max = calcTab[j];
maxInd = j;
}
}
//give mandate for party with max
mandates[maxInd]++;
calcTab[maxInd] = calcNewValue(votes[maxInd], mandates[maxInd]);
}
//present results
for (int i=0; i<groupCount; i++)
{
System.out.println("Partia " + (i+1) + " ma " + mandates[i] + " mandatow");
}
}
}