在 C++ 中查找一个特殊家庭的职业
假如有一个医生和工程师的特殊家庭。有一些规则,如下 −
- 每个人都有两个孩子
- 工程师的第一胎是工程师,第二胎是医生
- 医生的第一胎是医生,第二胎是工程师
- 所有代的医生和工程师都以工程师开始
因此,如果我们想要得到第 4 层和第 2 个位置的结果,则结果将为医生
其思路很简单。一个人的职业取决于以下两点。
- 父母的职业。
- 节点的位置:当节点的位置为奇数时,则其职业与其父母的职业相同。否则,职业与其父母的职业不同。
我们递归地找到父母的职业,然后使用上述第 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
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP