JUNGOL...28
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