考虑有一个特殊的医生和工程师家庭。有一些规则,如下所示-
每个人都有两个孩子
工程师的第一个孩子是工程师,第二个孩子是医生
医生的第一个孩子是医生,第二个孩子是工程师
世代相传的医生和工程师始于工程师
因此,如果我们想获得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