-
JUNGOL...28일지 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)