일지

JUNGOL...28

niamdank 2020. 12. 4. 12:11

Language_Code/함수3/형성평가1


문제                                            

자연수 N을 입력받아 1부터 N까지 출력을 하되 n-1번째 값은 n번째 값을 2로 나눈 몫이 되도록 하는 프로그램을 작성하시오.

 

입력 예                                        

100

 

출력 예                                        

1 3 6 12 25 50 100

 

Hint!

n/2를 호출한 후에 n을 출력하도록 하는 재귀함수를 작성한다.


FormativeFunction301.h

#include <iostream>

class FormativeFunction301 : public Base
{
private:
	void Function(int n);
};

 

FormativeFunction301.cpp

void FormativeFunction301::Code()
{
	int n;

	std::cin >> n;

	Function(n);
}

void FormativeFunction301::Function(int n)
{
	if (n == 0)
	{
		return;
	}

	Function(n / 2);
	std::cout << n << ' ';
}

 

Language_Code/함수3/형성평가2


문제                                            

자연수 N을 입력받아 N이 홀수인 경우에는 1부터 N까지의 홀수를 짝수인 경우는 2부터 N까지의 짝수를 모두 출력하는 프로그램을 재귀함수로 작성하시오.

 

입력 예                                        

15

 

출력 예                                        

1 3 5 7 9 11 13 15


FormativeFunction302.h

#include <iostream>

class FormativeFunction302 : public Base
{
private:
	void Function(int n);
};

 

FormativeFunction302.cpp

void FormativeFunction302::Code()
{
	int n;

	std::cin >> n;

	Function(n);
}

void FormativeFunction302::Function(int n)
{
	if (n <= 0)
	{
		return;
	}

	Function(n - 2);
	std::cout << n << ' ';
}

 

Language_Code/함수3/형성평가3


문제                                            

자연수 N과 M을 입력받아서 주사위를 N번 던져서 나온 눈의 합이 M이 나올 수 있는 모든 경우를 출력하는 프로그램을 작성하시오. 단, N은 10 이하의 정수이다.

 

입력 예                                        

3 10

 

출력 예                                        

1 3 6

1 4 5

1 5 4

1 6 3

2 2 6

2 3 5

6 2 2

6 3 1

 

Hint!

재귀함수에 레벨(level)과 합계(sum) 두 개의 인수를 전달하여 sum이 M과 같은 경우에만 출력하도록 한다. (정의 : void dice(int level int sum) 호출 : dice(level+1 sum+i))


FormativeFunction303.h

#include <iostream>

class FormativeFunction303 : public Base
{
private:
	void Function(int arr[], int curIdx, int sum, int n, int m);
};

 

FormativeFunction303.cpp

void FormativeFunction303::Code()
{
	int arr[10];
	int n, m;

	std::cin >> n >> m;

	std::fill_n(arr, n, 1);

	Function(arr, 0, 0, n, m);
}

void FormativeFunction303::Function(int arr[], int curIdx, int sum, int n, int m)
{
	if (curIdx == n)
	{
		if (sum == m)
		{
			for (int i = 0; i < n; i++)
			{
				std::cout << arr[i] << ' ';
			}
			std::cout << '\n';
		}
		return;
	}

	for (int i = 1; i <= 6; i++)
	{
		arr[curIdx] = i;
		Function(arr, curIdx + 1, sum + i, n, m);
	}
}

 

Language_Code/함수3/형성평가4


문제                                            

첫 번째는 1, 두 번째는 2, 세 번째부터는 앞의 두 수의 곱을 100으로 나눈 나머지로 이루어진 수열이 있다.

100 이하의 자연수 N을 입력받아 재귀함수를 이용하여 N번째 값을 출력하는 프로그램을 작성하시오.

 

입력 예                                        

8

 

출력 예                                        

92

 

Hint!

1 2 2 4 8 32 56 92 ...


FormativeFunction304.h

#include <iostream>

class FormativeFunction304 : public Base
{
private:
	void Function(int num1, int num2, int n);
};

 

FormativeFunction304.cpp

void FormativeFunction304::Code()
{
	int n;

	std::cin >> n;

	Function(1, 2, n - 1);
}

void FormativeFunction304::Function(int num1, int num2, int n)
{
	if (n == 0)
	{
		std::cout << num1;
		return;
	}

	Function(num2, (num1 * num2) % 100, n - 1);
}

 

Language_Code/함수3/형성평가5


문제                                            

100만 이하의 자연수 N을 입력받아 짝수이면 2로 홀수이면 3으로 나누는 작업을 반복하다가 그 값이 1이 되면 그때까지 나누었던 작업의 횟수를 출력하는 프로그램을 재귀함수로 작성하시오.

 

입력 예                                        

100

 

출력 예                                        

6

 

Hint!

100 → 50 → 25 → 8 → 4 → 2 → 1 횟수(level)도 함께 전달하고 n이 1이면 level을 출력하면 된다. 함수(n/2 또는 n/3 level+1)


FormativeFunction305.h

#include <iostream>

class FormativeFunction305 : public Base
{
private:
	void Function(int n, int count);
};

 

FormativeFunction305.cpp

void FormativeFunction305::Code()
{
	int n;

	std::cin >> n;

	Function(n, 0);
}

void FormativeFunction305::Function(int n, int count)
{
	if (n == 1)
	{
		std::cout << count;
		return;
	}
	
	if (n % 2 == 0)
	{
		Function(n / 2, count + 1);
	}
	else
	{
		Function(n / 3, count + 1);
	}
}

 

Language_Code/함수3/형성평가6


문제                                            

3자리로 이루어진 자연수 3개를 입력받아 그 수들의 곱을 구한 후 그 결과값의 각 자리 숫자들중 0을 제외한 모든 수들의 곱을 구하여 출력하는 프로그램을 재귀함수로 작성하시오.

 

입력 예                                        

100 123 111

 

출력 예                                        

270

 

Hint!

입력예제의 세 수의 곱은 1365300이다. 그러므로 1 * 3 * 6 * 5 * 3 = 270 1의 자리수 * 1의 자리를 제외한 남은 자리수의 곱 (단 1의 자리수가 0이면 1로 바꾸어서 곱한다.)


FormativeFunction306.h

#include <iostream>

class FormativeFunction306 : public Base
{
private:
	void Function(int num, int result);
};

 

FormativeFunction306.cpp

void FormativeFunction306::Code()
{
	int num1, num2, num3;

	std::cin >> num1 >> num2 >> num3;

	Function(num1 * num2 * num3, 1);
}

void FormativeFunction306::Function(int num, int result)
{
	if (num == 0)
	{
		std::cout << result;
		return;
	}

	int var{ num % 10 };
	var = (var != 0 ? var : 1);

	Function(num / 10, result * var);
}

 

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

 

NadanKim/CodingTest_JUNGOL

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

github.com