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

You may also like...

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.