의사와 엔지니어의 특별한 가족이 있다고 생각해 보십시오. 몇 가지 규칙이 있습니다. 다음과 같습니다. -
- 누구나 두 자녀가 있습니다
- 엔지니어의 첫째 아이는 엔지니어, 둘째 아이는 의사
- 의사의 첫째 아이는 의사, 둘째 아이는 엔지니어
- 모든 세대의 의사와 엔지니어는 엔지니어에서 시작됩니다.
따라서 레벨 4 및 pos 2에 대한 결과를 얻으려면 결과는 Doctor가 됩니다.
아이디어는 간단합니다. 사람의 직업은 다음 두 가지에 달려 있습니다.
- 부모의 직업
- 노드의 위치:노드의 위치가 홀수이면 그 직업은 부모와 동일합니다. 그렇지 않으면 직업이 부모와 다릅니다.
재귀적으로 부모의 직업을 찾은 다음 위의 2번 항목을 사용하여 현재 노드의 직업을 찾습니다.
예시
#include<iostream>
using namespace std;
char getProfession(int level, int pos) {
if (level == 1)
return 'E';
if (getProfession(level-1, (pos+1)/2) == 'D')
return (pos%2)? 'D' : 'E';
return (pos%2)? 'E' : 'D';
}
int main(void) {
int level = 4, pos = 2;
cout << "The profession is: ";
if(getProfession(level, pos) == 'E'){
cout << "Engineer";
} else {
cout << "Doctor" ;
}
} 출력
The profession is: Doctor