ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JUNGOL...27
    일지 2020. 12. 1. 16:37

    Language_Code/함수3/자가진단1


    문제                                            

    20 이하의 자연수 N을 입력받아 재귀함수를 이용해서 문자열 “recursive”를 N번 출력하는 프로그램을 작성하시오.

     

    입력 예                                        

    3

     

    출력 예                                        

    recursive

    recursive

    recursive


    BasicFunction301.h

    #include <iostream>
    
    class BasicFunction301 : public Base
    {
    private:
    	void Function(int n);
    };

     

    BasicFunction301.cpp

    void BasicFunction301::Code()
    {
    	int n;
    	
    	std::cin >> n;
    
    	Function(n);
    }
    
    void BasicFunction301::Function(int n)
    {
    	if (n <= 0)
    	{
    		return;
    	}
    
    	std::cout << "recursive\n";
    
    	Function(n - 1);
    }

     

    Language_Code/함수3/자가진단2


    문제                                            

    자연수 N을 입력받아 재귀함수를 이용하여 N부터 1까지 차례대로 출력하는 프로그램을 작성하시오. 
    N은 50이하의 자연수이다.

     

    입력 예                                        

    5

     

    출력 예                                        

    5 4 3 2 1


    BasicFunction302.h

    #include <iostream>
    
    class BasicFunction302 : public Base
    {
    private:
    	void Function(int n);
    };

     

    BasicFunction302.cpp

    void BasicFunction302::Code()
    {
    	int n;
    
    	std::cin >> n;
    
    	Function(n);
    }
    
    void BasicFunction302::Function(int n)
    {
    	if (n <= 0)
    	{
    		return;
    	}
    
    	std::cout << n << ' ';
    
    	Function(n - 1);
    }

     

    Language_Code/함수3/자가진단3


    문제                                            

    100 이하의 자연수 N을 입력받아 재귀함수를 이용하여 1부터 N까지의 합을 구하는 프로그램을 작성하시오.

     

    입력 예                                        

    100

     

    출력 예                                        

    5050


    BasicFunction303.h

    #include <iostream>
    
    class BasicFunction303 : public Base
    {
    private:
    	int Function(int n);
    };

     

    BasicFunction303.cpp

    void BasicFunction303::Code()
    {
    	int n;
    
    	std::cin >> n;
    
    	std::cout << Function(n);
    }
    
    int BasicFunction303::Function(int n)
    {
    	if (n <= 0)
    	{
    		return 0;
    	}
    
    	return n + Function(n - 1);
    }

     

    Language_Code/함수3/자가진단4


    문제                                            

    9자리 이하의 자연수를 입력받아 재귀함수를 이용하여 각 자리 숫자의 제곱의 합을 출력하는 프로그램을 작성하시오.
    ( main()함수에 변수 하나, 재귀함수에 매개변수 하나만을 사용할 수 있다.)

     

    입력 예                                        

    12345

     

    출력 예                                        

    55

     

    Hint!

    끝자리(1의 자리)에 있는 숫자와 마지막 자리를 뺀 수의 각자리의 제곱을 더하면 된다. (n%10 + n/10의 각자리의 합)


    BasicFunction304.h

    #include <iostream>
    
    class BasicFunction304 : public Base
    {
    private:
    	int Function(int var);
    };

     

    BasicFunction304.cpp

    void BasicFunction304::Code()
    {
    	int var;
    	
    	std::cin >> var;
    
    	std::cout << Function(var);
    }
    
    int BasicFunction304::Function(int var)
    {
    	if (var <= 0)
    	{
    		return 0;
    	}
    
    	int num{ var % 10 };
    
    	return num * num + Function(var / 10);
    }

     

    Language_Code/함수3/자가진단5


    문제                                            

    10 이하의 자연수 N을 입력받아 주사위를 N번 던져서 나올 수 있는 모든 경우를 출력하되 중복되는 경우에는 앞에서부터 작은 순으로 1개만 출력하는 프로그램을 작성하시오.

     

    입력 예                                        

    3

     

    출력 예                                        

    1 1 1

    1 1 2

    ...

    1 1 6

    1 2 2

    1 2 3

    ...

    5 6 6

    6 6 6

     

    Hint!

    "1 1 2", "1 2 1", "2 1 1"은 모두 1이 두 번 2가 한 번 나온 경우이므로 중복이다. 이러한 경우 앞에서부터 작은순으로"1 1 2"한 가지만 출력해야 한다. 현재의 레벨(arr[i])에 담을 값을 1부터가 아니라 이전 레벨에 담겨있는 값(arr[level-1])부터로 정하면 된다. 이 경우 level[0]에는 어떤 값을 넣어야 할지 잘 생각해 보자.


    BasicFunction305.h

    #include <iostream>
    
    class BasicFunction305 : public Base
    {
    private:
    	void Function(int arr[], int curIdx, int n);
    };

     

    BasicFunction305.cpp

    void BasicFunction305::Code()
    {
    	int n;
    	int arr[10]{};
    
    	std::cin >> n;
    
    	std::fill_n(arr, 10, 1);
    
    	Function(arr, 0, n);
    }
    
    void BasicFunction305::Function(int arr[], int curIdx, int n)
    {
    	if (curIdx == n)
    	{
    		for (int i = 0; i < n; i++)
    		{
    			std::cout << arr[i] << ' ';
    		}
    		std::cout << '\n';
    		return;
    	}
    
    	int beg{ curIdx > 0 ? arr[curIdx - 1] : 1 };
    	for (int i = beg; i <= 6; i++)
    	{
    		arr[curIdx] = i;
    
    		Function(arr, curIdx + 1, n);
    	}
    }

     

    Language_Code/함수3/자가진단6


    문제                                            

    첫 번째 수는 1이고 N번째 수는 (N/2)번째 수(파이썬인경우 N//2번째)와 (N-1)번째 수의 합으로 구성된 수열이 있다.

    50 이하의 자연수 N을 입력받아 재귀호출을 이용하여 이 수열에서 N번째 수를 출력하는 프로그램을 작성하시오.

    (1 2 3 5 7 10 13 18 …)

     

    입력 예                                        

    8

     

    출력 예                                        

    18

     

    Hint!

    8번째 수는 4번째(8/2) 수인 5와 7번째(8-1) 수인 13의 합이다.


    BasicFunction306.h

    #include <iostream>
    
    class BasicFunction306 : public Base
    {
    private:
    	int Function(int n);
    };

     

    BasicFunction306.cpp

    void BasicFunction306::Code()
    {
    	int n;
    
    	std::cin >> n;
    
    	std::cout << Function(n);
    }
    
    int BasicFunction306::Function(int n)
    {
    	if (n == 1)
    	{
    		return 1;
    	}
    
    	return Function(n / 2) + Function(n - 1);
    }

     

    NadanKim/CodingTest_JUNGOL: JUNGOL 코딩 테스트를 위한 저장소 (github.com)

     

    NadanKim/CodingTest_JUNGOL

    JUNGOL 코딩 테스트를 위한 저장소. Contribute to NadanKim/CodingTest_JUNGOL development by creating an account on GitHub.

    github.com

     

    댓글

Designed by Tistory.