알고리즘 연습 - 10

유명현·2024년 5월 22일
#include<stdio.h>
/*첫번째 줄에 n(학생수)을 입력하고 (1<=n<=100) 두번째 줄에 학생 수 마다 점수를 입력하시오. 그리고 3번 째 점수 한 점수를 출력하시오   */

#define TRUE 1
#define FALSE 0

void score_store_func (uint8_t n, uint32_t* number_buf);
void mid_order_func(uint8_t n, uint32_t* number_buf);
void switch_buf_func (uint8_t i, uint8_t big_addr, uint32_t* number_buf);
void print_buf (uint8_t n, uint32_t* number_buf);

int main()
{ 
    uint8_t n = 0;
    uint32_t number_buf[100]  = {0};

    printf("1 ~ 100 이내에 수를 입력 하시오 :");
    scanf("%d", &n);
    printf("N = %d\n", n);
    
    score_store_func(n, number_buf);
    mid_order_func(n, number_buf);    
    
    return 0;
}

void score_store_func (uint8_t n, uint32_t* number_buf)
{
    for (uint8_t i = 0; i < n ; i++)
    {
       scanf("%d", &number_buf[i]);     
       printf("number_buf[%d] = %d\n", i, number_buf[i]);
    }
}

void mid_order_func (uint8_t n, uint32_t* number_buf)
{
    uint32_t big_value = 0;
    uint8_t big_addr = 0;
    uint8_t switch_flag = FALSE;
    
    for (uint8_t i = 0; i < n; i++)
    {
        big_value = *(number_buf + i);
        uint8_t j = (i + 1);
        for(; j < n; j++)
        {
            if (big_value < number_buf[j])
            {
                big_value = number_buf[j];
                big_addr = j;
                switch_flag = TRUE; 
            }
        }
        if (TRUE == switch_flag)
        {
            switch_buf_func (i, big_addr, number_buf);
            switch_flag = FALSE;
        }
    }
    
    print_buf(n, number_buf);
}

void switch_buf_func (uint8_t i, uint8_t big_addr, uint32_t* number_buf)
{
    uint32_t temp_buf = 0;
    
    temp_buf = number_buf[i];
    number_buf[i] = number_buf[big_addr];
    number_buf[big_addr] = temp_buf;
}

void print_buf (uint8_t n, uint32_t* number_buf)
{
    uint8_t first_score = number_buf[0];
    uint8_t second_score = 0;
    uint8_t second_addr = 0;
    uint8_t third_addr = 0;
    
    for (uint8_t i = 1; i < n; i++)
    {
        if (first_score != number_buf[i])
        {
            second_addr = i;
            second_score = number_buf[second_addr];
            break;
        } 
    }

    for (uint8_t i = second_addr; i < n; i++)
    {
        if (second_score != number_buf[i])
        {
            third_addr = i;
            break;
        }
    }
    
    printf("%d  ", number_buf[third_addr]);
}



    
profile
기억보다 기록을

0개의 댓글