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;
}
Son yorumlar