Millet Vekili Hesabı 2
Seçimde N adet partinin almış oldukları oy miktarlarına göre bir il için belirlenmiş olan milletvekili dağıtımı aşağıdaki mantık doğrultusunda yapılmaktadır.
1. milletvekilliği, oy miktarı n adet partiden en yüksek olan partiye verilmektedir, ve ilgili partinin oy miktarı 1/3 oranında eksiltilmektedir. Bir sonraki milletvekili dağıtımı da benzer şekilde en fazla oyu olan partiye verilerek benzer şekilde o partinin oy miktarı da 1/3 oranında eksiltilmektedir. İşlem bu şekilde 0 milletvekili kalıncaya kadar sürdürülmekte ve sonuçta her partinin kaç adet milletvekili çıkaracağı belirlenmektedir.
Veri ortamından milletvekili sayısını ,ilin adını, ve de n partinin oy miktarlarını girerek her bir partinin çıkaracağı milletvekili sayısını bulan C programını yazınız.
Not: N değerini paremetre olarak giriniz. EN fazla girilecek olan N değeri 10 olsun. Dizinli değişkenlerinizi sınırını buna göre belirleyiniz.
#include <stdio.h> int EnFazlaSiraBul(int sayilar[], int adet) { if(adet==0) return -1; int enfazla, sira; enfazla=sayilar[0]; sira=0; for(int i=1; i<adet; i++) { if(sayilar[i]>enfazla) { enfazla=sayilar[i]; sira=i; } } return sira; } int main() { int partisay; int vekiller; char iladi[20]; int oylar[10]; int partivekiller[10]={}; scanf("%d", &partisay); scanf("%d", &vekiller); scanf("%s", iladi); for(int i=0; i<partisay; i++) { scanf("%d", &oylar[i]); } for(int vekil=0; vekil<vekiller; vekil++) { int kazanan=EnFazlaSiraBul(oylar, partisay); partivekiller[kazanan]++; oylar[kazanan]-=oylar[kazanan]/3; } for(int i=0; i<partisay; i++) { printf("%d Partisi %d millet vekili cikartmistir\n", i+1, partivekiller[i]); } return 0; }