Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 특별한 가족의 직업 찾기

<시간/>

의사와 엔지니어의 특별한 가족이 있다고 생각해 보십시오. 몇 가지 규칙이 있습니다. 다음과 같습니다. -

  • 누구나 두 자녀가 있습니다
  • 엔지니어의 첫째 아이는 엔지니어, 둘째 아이는 의사
  • 의사의 첫째 아이는 의사, 둘째 아이는 엔지니어
  • 모든 세대의 의사와 엔지니어는 엔지니어에서 시작됩니다.

따라서 레벨 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