일지

JUNGOL...27

niamdank 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