Ocena użytkownikóww: ***** / 2
Nadesłany przez Tomasz Lubiński, 07 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.
sainte_lague_m_c.c:
//
// Metoda Sainte-Lague (zmodyfikowana) przydzialu mandatow
// www.algorytm.org
// (c)2006 Tomasz Lubinski
//
#include "stdio.h"
float calcNewValue(int votes, int mandates)
{
if (mandates == 0) {
return (votes*1.0) / 1.4;
}
return (votes*1.0) / (2*mandates + 1.0);
}
int main()
{
int mandates[100];
int votes[100];
float calcTab[100];
float max;
int groupCount, mandatesCount, i, j, maxInd;
//get all data
printf("Podaj liczbe partii (max. 100)\n");
scanf("%d", &groupCount);
printf("Podaj liczbe mandatow\n");
scanf("%d", &mandatesCount);
for (i=0; i<groupCount; i++)
{
printf("Podaj liczbe glosow na partie %d\n", i+1);
scanf("%d", &votes[i]);
}
//clear number of mandates
for (i=0; i<groupCount; i++)
{
mandates[i] = 0;
}
//calculate mandates (Sainte-Lague)
for (i=0; i<groupCount; i++)
{
calcTab[i] = votes[i];
}
for (i=0; i<mandatesCount; i++)
{
//find max
max = -1;
for (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 (i=0; i<groupCount; i++)
{
printf("Partia %d ma %d mandatow\n", i+1, mandates[i]);
}
return 0;
}