読者です 読者をやめる 読者になる 読者になる

chigichan24に人権はあるだろうか,いやない

競技プログラミングやってます。

AOJ0001 List of Top 3 Hills

おはようございます


ねむすぎて死にそうなのchigichanです。

今日はAOJの0001 List of Top 3 Hillsです。
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0001

この問題は、10個の高さを3つ高い順に出力するだけですね。

さっそく提出されているコードを見てみよう。

#include<stdio.h>
int main(void)
{
    int i[11],j,k;
    for(j=0;j<10;j++){
        scanf("%d",&j[i]);
    }
    for(j=0;j<3;j++){
        for(k=j+1;k<10;k++){
            if(i[j]<i[k]){
                i[10]=i[j];
                i[j]=i[k];
                i[k]=i[10];
            }
        }
    printf("%d\n",i[j]);
    }
    return 0;
}


うん、バブルソートやってるっぽい。

ん?

は?

iで配列とってるのに、入力でjの配列になってる?!!!!!!!!!!!!!!

やばいですね。
たぶん参照してるとこが一緒なのだろう(ということにしておこう)。


ちなみに、c++だとalgorithmをincludeすると...

#include<cstdio>
#include<algorithm>
using namespace std;
int main(){
    int num[16]={0};

    for(int i = 0; i < 10; i++){
        scanf("%d",&num[i]);
    }

    sort(num , num+10);

    printf("%d\n%d\n%d\n",num[9],num[8],num[7]);

    return 0;
}


こんなんで済みますね('ω')v

しかも、クイックソートなんで速いです(cだと実装だるいし)

まぁ、いろんなソートを試してみるのはいいことだと思います。

ちなみに、この問題は、ソート以外でとく方法もあります。
そのコードはまたいつか...


以上chigichanでした。