의사와 엔지니어의 특별한 가족이 있다고 생각해 보십시오. 몇 가지 규칙이 있습니다. 다음과 같습니다. -
- 누구나 두 자녀가 있습니다
- 엔지니어의 첫째 아이는 엔지니어, 둘째 아이는 의사
- 의사의 첫째 아이는 의사, 둘째 아이는 엔지니어
- 모든 세대의 의사와 엔지니어는 엔지니어에서 시작됩니다.
따라서 레벨 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