Jin.のプログラム備忘録

適当な自分の備忘録

選挙のソート[制作時間: 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);
    ///////////////////////////////////////////
    
}