#include <stdio.h>
void run_election( int votes[ 5 ] [ 4 ] , const char * label_case) {
printf ( "=== %s ===\n " , label_case
) ;
for ( int i = 0 ; i < 5 ; i++ ) {
for ( int j = 0 ; j < 4 ; j++ ) {
printf ( "%d\t \t " , votes
[ i
] [ j
] ) ; }
}
int total_votes_candidate[ 4 ] = { 0 } ;
int grand_total = 0 ;
for ( int j = 0 ; j < 4 ; j++ ) {
for ( int i = 0 ; i < 5 ; i++ ) {
total_votes_candidate[ j] += votes[ i] [ j] ;
}
grand_total += total_votes_candidate[ j] ;
}
char candidate_names[ 4 ] = { 'A' , 'B' , 'C' , 'D' } ;
printf ( "\n Hasil Perhitungan Suara:\n " ) ; for ( int j = 0 ; j < 4 ; j++ ) {
double percentage = ( ( double ) total_votes_candidate[ j] / grand_total) * 100.0 ;
printf ( "Kandidat %c: %d suara (%.2f%%)\n " , candidate_names
[ j
] , total_votes_candidate
[ j
] , percentage
) ; }
printf ( "Total Keseluruhan Suara: %d\n \n " , grand_total
) ;
int winner_index = - 1 ;
for ( int j = 0 ; j < 4 ; j++ ) {
double percentage = ( ( double ) total_votes_candidate[ j] / grand_total) * 100.0 ;
if ( percentage > 50.0 ) {
winner_index = j;
break ;
}
}
if ( winner_index != - 1 ) {
// c. Pemenang mutlak (> 50%)
printf ( "PENGUMUMAN: Kandidat %c memenangkan pemilihan secara mutlak dengan perolehan di atas 50%% suara!\n \n " , candidate_names
[ winner_index
] ) ; } else {
int first_max = - 1 , second_max = - 1 ;
int first_idx = - 1 , second_idx = - 1 ;
for ( int j = 0 ; j < 4 ; j++ ) {
if ( total_votes_candidate[ j] > first_max) {
second_max = first_max;
second_idx = first_idx;
first_max = total_votes_candidate[ j] ;
first_idx = j;
} else if ( total_votes_candidate[ j] > second_max) {
second_max = total_votes_candidate[ j] ;
second_idx = j;
}
}
printf ( "PENGUMUMAN: Tidak ada kandidat yang meraih lebih dari 50%% suara.\n " ) ; printf ( "Terjadi pemilu lanjutan (runoff) antara Kandidat %c dan Kandidat %c.\n \n " , candidate_names
[ first_idx
] , candidate_names
[ second_idx
] ) ; }
}
int main( ) {
int original_votes[ 5 ] [ 4 ] = {
{ 192 , 48 , 206 , 37 } ,
{ 147 , 90 , 312 , 21 } ,
{ 186 , 12 , 121 , 38 } ,
{ 114 , 21 , 408 , 39 } ,
{ 267 , 13 , 382 , 29 }
} ;
run_election( original_votes, "Uji Coba 1: Data Asli" ) ;
int modified_votes[ 5 ] [ 4 ] = {
{ 192 , 48 , 206 , 37 } ,
{ 147 , 90 , 312 , 21 } ,
{ 186 , 12 , 121 , 38 } ,
{ 114 , 21 , 108 , 39 } ,
{ 267 , 13 , 382 , 29 }
} ;
run_election( modified_votes, "Uji Coba 2: Kandidat C Mendapat 108 Suara di Precinct 4" ) ;
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp2b2lkIHJ1bl9lbGVjdGlvbihpbnQgdm90ZXNbNV1bNF0sIGNvbnN0IGNoYXIqIGxhYmVsX2Nhc2UpIHsKICAgIHByaW50ZigiPT09ICVzID09PVxuIiwgbGFiZWxfY2FzZSk7CiAgICAKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKSB7CiAgICAgICAgcHJpbnRmKCIlZFx0XHQiLCBpICsgMSk7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA0OyBqKyspIHsKICAgICAgICAgICAgcHJpbnRmKCIlZFx0XHQiLCB2b3Rlc1tpXVtqXSk7CiAgICAgICAgfQogICAgICAgIHByaW50ZigiXG4iKTsKICAgIH0KICAgIAogICAgaW50IHRvdGFsX3ZvdGVzX2NhbmRpZGF0ZVs0XSA9IHswfTsKICAgIGludCBncmFuZF90b3RhbCA9IDA7CgogICAgZm9yIChpbnQgaiA9IDA7IGogPCA0OyBqKyspIHsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDU7IGkrKykgewogICAgICAgICAgICB0b3RhbF92b3Rlc19jYW5kaWRhdGVbal0gKz0gdm90ZXNbaV1bal07CiAgICAgICAgfQogICAgICAgIGdyYW5kX3RvdGFsICs9IHRvdGFsX3ZvdGVzX2NhbmRpZGF0ZVtqXTsKICAgIH0KCiAgICBjaGFyIGNhbmRpZGF0ZV9uYW1lc1s0XSA9IHsnQScsICdCJywgJ0MnLCAnRCd9OwogICAgcHJpbnRmKCJcbkhhc2lsIFBlcmhpdHVuZ2FuIFN1YXJhOlxuIik7CiAgICBmb3IgKGludCBqID0gMDsgaiA8IDQ7IGorKykgewogICAgICAgIGRvdWJsZSBwZXJjZW50YWdlID0gKChkb3VibGUpdG90YWxfdm90ZXNfY2FuZGlkYXRlW2pdIC8gZ3JhbmRfdG90YWwpICogMTAwLjA7CiAgICAgICAgcHJpbnRmKCJLYW5kaWRhdCAlYzogJWQgc3VhcmEgKCUuMmYlJSlcbiIsIGNhbmRpZGF0ZV9uYW1lc1tqXSwgdG90YWxfdm90ZXNfY2FuZGlkYXRlW2pdLCBwZXJjZW50YWdlKTsKICAgIH0KICAgIHByaW50ZigiVG90YWwgS2VzZWx1cnVoYW4gU3VhcmE6ICVkXG5cbiIsIGdyYW5kX3RvdGFsKTsKCiAgICBpbnQgd2lubmVyX2luZGV4ID0gLTE7CiAgICBmb3IgKGludCBqID0gMDsgaiA8IDQ7IGorKykgewogICAgICAgIGRvdWJsZSBwZXJjZW50YWdlID0gKChkb3VibGUpdG90YWxfdm90ZXNfY2FuZGlkYXRlW2pdIC8gZ3JhbmRfdG90YWwpICogMTAwLjA7CiAgICAgICAgaWYgKHBlcmNlbnRhZ2UgPiA1MC4wKSB7CiAgICAgICAgICAgIHdpbm5lcl9pbmRleCA9IGo7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAod2lubmVyX2luZGV4ICE9IC0xKSB7CiAgICAgICAgLy8gYy4gUGVtZW5hbmcgbXV0bGFrICg+IDUwJSkKICAgICAgICBwcmludGYoIlBFTkdVTVVNQU46IEthbmRpZGF0ICVjIG1lbWVuYW5na2FuIHBlbWlsaWhhbiBzZWNhcmEgbXV0bGFrIGRlbmdhbiBwZXJvbGVoYW4gZGkgYXRhcyA1MCUlIHN1YXJhIVxuXG4iLCBjYW5kaWRhdGVfbmFtZXNbd2lubmVyX2luZGV4XSk7CiAgICB9IGVsc2UgewogICAgICAgIGludCBmaXJzdF9tYXggPSAtMSwgc2Vjb25kX21heCA9IC0xOwogICAgICAgIGludCBmaXJzdF9pZHggPSAtMSwgc2Vjb25kX2lkeCA9IC0xOwoKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDQ7IGorKykgewogICAgICAgICAgICBpZiAodG90YWxfdm90ZXNfY2FuZGlkYXRlW2pdID4gZmlyc3RfbWF4KSB7CiAgICAgICAgICAgICAgICBzZWNvbmRfbWF4ID0gZmlyc3RfbWF4OwogICAgICAgICAgICAgICAgc2Vjb25kX2lkeCA9IGZpcnN0X2lkeDsKICAgICAgICAgICAgICAgIGZpcnN0X21heCA9IHRvdGFsX3ZvdGVzX2NhbmRpZGF0ZVtqXTsKICAgICAgICAgICAgICAgIGZpcnN0X2lkeCA9IGo7CiAgICAgICAgICAgIH0gZWxzZSBpZiAodG90YWxfdm90ZXNfY2FuZGlkYXRlW2pdID4gc2Vjb25kX21heCkgewogICAgICAgICAgICAgICAgc2Vjb25kX21heCA9IHRvdGFsX3ZvdGVzX2NhbmRpZGF0ZVtqXTsKICAgICAgICAgICAgICAgIHNlY29uZF9pZHggPSBqOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHByaW50ZigiUEVOR1VNVU1BTjogVGlkYWsgYWRhIGthbmRpZGF0IHlhbmcgbWVyYWloIGxlYmloIGRhcmkgNTAlJSBzdWFyYS5cbiIpOwogICAgICAgIHByaW50ZigiVGVyamFkaSBwZW1pbHUgbGFuanV0YW4gKHJ1bm9mZikgYW50YXJhIEthbmRpZGF0ICVjIGRhbiBLYW5kaWRhdCAlYy5cblxuIiwgY2FuZGlkYXRlX25hbWVzW2ZpcnN0X2lkeF0sIGNhbmRpZGF0ZV9uYW1lc1tzZWNvbmRfaWR4XSk7CiAgICB9Cn0KCmludCBtYWluKCkgewogICAgaW50IG9yaWdpbmFsX3ZvdGVzWzVdWzRdID0gewogICAgICAgIHsxOTIsIDQ4LCAyMDYsIDM3fSwKICAgICAgICB7MTQ3LCA5MCwgMzEyLCAyMX0sCiAgICAgICAgezE4NiwgMTIsIDEyMSwgMzh9LAogICAgICAgIHsxMTQsIDIxLCA0MDgsIDM5fSwKICAgICAgICB7MjY3LCAxMywgMzgyLCAyOX0KICAgIH07CgogICAgcnVuX2VsZWN0aW9uKG9yaWdpbmFsX3ZvdGVzLCAiVWppIENvYmEgMTogRGF0YSBBc2xpIik7CgogICAgaW50IG1vZGlmaWVkX3ZvdGVzWzVdWzRdID0gewogICAgICAgIHsxOTIsIDQ4LCAyMDYsIDM3fSwKICAgICAgICB7MTQ3LCA5MCwgMzEyLCAyMX0sCiAgICAgICAgezE4NiwgMTIsIDEyMSwgMzh9LAogICAgICAgIHsxMTQsIDIxLCAxMDgsIDM5fSwgCiAgICAgICAgezI2NywgMTMsIDM4MiwgMjl9CiAgICB9OwoKICAgIHJ1bl9lbGVjdGlvbihtb2RpZmllZF92b3RlcywgIlVqaSBDb2JhIDI6IEthbmRpZGF0IEMgTWVuZGFwYXQgMTA4IFN1YXJhIGRpIFByZWNpbmN0IDQiKTsKCiAgICByZXR1cm4gMDsKfQ==