-
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)