พิจารณามีครอบครัวแพทย์และวิศวกรพิเศษ มีกฎบางอย่างอยู่ด้านล่าง −
- ทุกคนมีลูกสองคน
- ลูกคนแรกของวิศวกรคือวิศวกร ลูกคนที่สองคือหมอ
- ลูกคนแรกของหมอเป็นหมอ ลูกคนที่สองเป็นวิศวกร
- แพทย์และวิศวกรทุกรุ่นเริ่มต้นที่วิศวกร
ดังนั้นถ้าอยากได้ผลลัพธ์ระดับ 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