algorytm.org

Implementacja w Java



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Metoda d'Hondt'a - Implementacja w Java
Ocena użytkownikóww: *****  / 2
SłabyŚwietny
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");
		   }   
	}

}
Dodaj komentarz