おはようございます
ねむすぎて死にそうなの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でした。