[Atelier Blue アトリエブルー]Homeコンテストパソコン甲子園2003年本選>3問目

3問目(並び替え)

問題

1~10000までの範囲の整数が10個入力される。大きい順に3つ出力しなさい。ただし、同じ大きさが複数ある可能性有り。

注:原文では整数は山の高さです。

入力


整数1
整数2


整数9
整数10

出力


1番大きい数(整数)
2番大きい数(整数)
3番大きい数(整数)

入力例


2514
5648
5613
8612
456
7456
1231
3489
2313
4886

出力例


8612
7456
5648

解き方例

いくつかありますが、今回は挿入法(?)で行きましょう。ドミノ倒しみたいに大きい数を残していきます。

ソースコード

お持ち帰り

C/C++

#include <stdio.h>
//配列や、ソートなんて使いません。

int main(){
    int a,b,c,in,i;

    a=b=c=0;

    for(i=0;i<10;i++){
        scanf("%d",&in);
        if(in>a){
            int t=a;
            a=in;
            in =t;
        }
        if(in>b){
            int t=b;
            b=in;
            in =t;
        }
        if(in>c){
            int t=c;
            c=in;
            in =t;
        }
    }
    printf("%d\n%d\n%d\n",a,b,c);
    return 0;
}

ソースコード(ソート関数版)

c/c++

//ソート関数使用版

#include <stdio.h>
#include <stdlib.h>

//比較関数
int comp(const void * a,const void * b){
    return (*(int *)b - *(int *)a);
}

int main(){
    int input[10];
    int i;

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

    //並び替え
    qsort(input,10,sizeof(int),comp);

    for(i=0;i<3;i++){
        printf("%d\n",input[i]);
    }
    return 0;
}

Java

import java.io.*;

class a03{
    public static void main(String args[])throws IOException{
        BufferedReader br =  new BufferedReader(new InputStreamReader(System.in));
        
        int input[] = new int[10];
        
        for(int i=0;i<10;i++){
            input[i] = Integer.parseInt(br.readLine());
        }
        java.util.Arrays.sort(input);
        
        for(int i=9;i>=7;i--){
            System.out.println(input[i]);
        }
        
    }
}

VB.Net

Imports System

Module m

    Sub Main()
        Dim input(9) As Integer
        Dim i As Integer

        For i = 0 To 9
            input(i) = Convert.ToInt32(Console.ReadLine())
        Next

        Array.Sort(input)
        
        For i = 9 To 7 Step -1
            Console.WriteLine(input(i))
        Next
    End Sub

End Module

その他

3個くらいであれば、コピペしてすぐ出来ます。まあ、ものによりけりですが、変にループが多くない分早く書けると思います。もう一回ループさせれば配列でソートになりますし、比較関数を使う方法もあります。その時の余裕に合わせてどうぞ。


ページの一番上へ
前のページへ 一覧に戻る 次のページへ
初版2006-5-5 最終更新2006-5-8
[Atelier Blue アトリエブルー]Homeコンテストパソコン甲子園2003年本選>3問目