programming language/C언어 기초 문제풀이

[함수]: 기본문제3

E.W.I 2021. 7. 10. 20:21
반응형

https://cafe.naver.com/mitcari

 

MIT 코딩.알고리즘 연구원 : 네이버 카페

학교 교육에서 의무적으로 실시되는 소프트웨어 및 C언어와 알고리즘을 전문적으로 지도합니다.

cafe.naver.com

 

[문제 풀이]

 

1. 배열의 크기가 7인 자료형 배열을 선언합니다.

2. 오름차순으로 정렬하는 것처럼 swap 매크로를 만듭니다.

 

 

#include <stdio.h>
 
 
void check(int arr[7])
{
    int swap=0;
    for (int i = 0; i < 7; i++)
    {
        scanf("%d"&arr[i]);
    }
 
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 6; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                swap = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1= swap;
            }
        }
    }
    for (int i = 0; i < 7; i++)
    {
        printf("%d ", arr[i]);
    }
    
 
}
 
int main()
{
    int arr[7= { 0 };
    check(arr);
    
    return 0;
}
cs

 

 


 

[문제 풀이]

- 재귀함수를 사용하여 풀어야 한다.

- 반복적인 행동을 할 때 재귀 함수가 유용하다는 것을 알게 되었다.

 

 

#include <stdio.h>
#define _CRT_SECURE_NO_WARNINGS 
 
int sum = 0;
 
int print(int a)
{
    sum += a;
    if (a <=0)
    {
        printf("%d", sum);
        return ;
    }
    
 
    return print(a - 1);
 
}
 
int main()
{
    int a;
    scanf("%d"&a);
    print(a);
    
    
    return 0;
}
cs

입력받은 값을 계속해서 -1 시켜주면서 함수가 실행되도록 한다.

 

 


<재귀 함수>

 

 

[문제 풀이]

-평소 푸는 것처럼 배열의 첫 번째 원소에 1을 넣고 증가시키면서 하려고 했지만, 재귀 호출이 필요한 문제라 고민이 많았다.

-재귀 호출을 반복문으로 생각하고 n/2 번째 원소와 n-1번째를 계속 호출하도록 해봤다.

 

 

#include <stdio.h>
int print(int n)
{
    if (n == 1)
    {
            return 1;
    }
 
    return print(n - 1+ print(n / 2);
}
 
 
 
int main(void)
{
    int n;
    scanf("%d"&n);
    printf("%d\n", print(n));
}
cs

-생각보다 짧고 쉽게 풀렸다.

'programming language > C언어 기초 문제풀이' 카테고리의 다른 글

[문자열]: 기본문제1  (0) 2021.07.15
[함수]: 기본문제4  (0) 2021.07.11
[함수]: 기본문제2  (0) 2021.07.08
[함수]: 기본문제 풀이  (0) 2021.07.07
배열기초문제4  (0) 2021.07.02