Home > Study > C Language > C task > [ex62] 배열에서 큰 값 2개 찾기 (10점)

[ex62] 배열에서 큰 값 2개 찾기 (10점)
Study Language

문제 설명


정수 10개가 공백을 기준으로 한 줄에 입력되어 배열 a에 저장된다.
이 값들 중 가장 큰 값과 두 번째로 큰 값을 차례대로 공백을 기준으로 한 줄에 인쇄하라
예를 들어 1 23 435 20 -29 20 1234 -45 24 100 이 입력된다면
가장 큰값이 1234이고 그 다음이 435이므로 1234 435가 인쇄되어야 한다.
만약 가장 큰 값과 같은 값이 여럿일 경우 가장 큰 값과 두 번째로 큰 값은 같은 값이 된다.
예를 등어 1 2 3 4 9 9 8 7 6 5 일 경우 1등, 2등은 모두 9 이므로 9 9가 인쇄되어야 한다.
다음 코드를 사용하되 필요한 변수는 임의로 선언하여 사용한다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

void main(void)
{
    int a[10];
    int i;

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

    // 코드 작성

}

입력 예시


1 23 435 20 -29 20 1234 -45 24 100

출력 예시


1234 435

정답 코드


#if 0

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

void main(void)
{
    int a[10];
    int i;

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

    int n;

    for(n = 0; n < 2; n++)
    {
        int r = 0;
        int t;

        for(i = 1; i <= 9 - n; i++)
        {
            if(a[i] > a[r])
            {
                r = i;
            }
        }

        t = a[i-1];
        a[i-1] = a[r];
        a[r] = t;
    }

    printf("%d %d", a[9], a[8]);
}

#endif

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

void main(void)
{
    int a[10];
    int i;

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

    int r[2] = {0,1};
    
    if(a[r[0]] < a[r[1]]) 
    {
        r[0] = 1;
        r[1] = 0;
    }

    for(i = 1; i < 10; i++)
    {
        if(a[i] > a[r[1]])
        {
            r[1] = i;

            if(a[i] > a[r[0]])
            {
                r[1] = r[0];
                r[0] = i;
            }            
        }
    }

    printf("%d %d", a[r[0]], a[r[1]]);
}

메모


printf 내부의 \n 습관화 필요