選挙のソート[制作時間: 58分45秒]
今日は、選挙のソートをしました。
説明からすると、演説する毎に立候補者の支持者が1減り、その減った分演説者の支持が増えるというものです。
ですが、今回は成功しませんでした。
たぶんですが、最後の出力が原因だと思っています。
支持者数1位だけを出力するのに対し、1人しか出力できないようにしてしまいました。
これでは、支持者数が被った場合が、出力できないことに気づきました。
ほかにミスを発見された方はコメントお願いします!!
#include <stdio.h> int main(void){ int candidates; //立候補者 int voter; //有権者 int numSpeech; //演説回数 scanf("%d", &candidates); scanf("%d", &voter); scanf("%d", &numSpeech); int speaker; //演説者 int supporter[candidates + 1]; //支持者 + 指示していない人 // 初期化 ////////////////////////////////// for(int i = 0; i <= candidates; i++) { supporter[i] = 0; //立候補者の支持者を初期化 if(i == candidates) { supporter[i] = voter; //最後の配列に全有権者を入れる } } /////////////////////////////////////////// // 実行 /////////////////////////////////// for(int i = 0; i < numSpeech; i++) { scanf("%d", &speaker); for(int j = 0; j <= candidates; j++) { if(supporter[j] != 0) { supporter[j] -= 1; supporter[i] += 1; } } } /////////////////////////////////////////// // ランク付け ///////////////////////////// int result = 0; //結果 for(int i = 0; i < candidates; i++) { for(int j = i + 1; j < candidates; j++) { if(i != result) { if(supporter[result] < supporter[j]) { result = j; i = 0; } } } } /////////////////////////////////////////// // 出力 /////////////////////////////////// printf("%d",result + 1); /////////////////////////////////////////// }