C++编程程序找出谁是董事长问题案例代码

题目描述

chuck 在一家互联网公司上班,公司的上下级很清晰,除了董事长,每个人都有一个唯一的上级。

比如一个公司里面,A的上级是X,B的上级是X,C的上级是Y,D的上级是Y,X的上级是Z,Y的上级是Z,那么只有Z是没有上级的,所以Z是董事长。

现在每个人用一个数字表示,给出公司的上下级关系,现在让你帮忙找出董事长。

案例代码

这个问题可以通过构建一个上级-下级关系的映射表来解决。可以使用一个哈希表(或unordered_map)来实现这个映射表,键为下级,值为上级。

具体的解题思路可以分为两步:

  1. 遍历给定的上下级关系,将每个人的上级和下级关系存入哈希表中。
  2. 遍历哈希表的键,找到没有上级的人,也就是董事长。

下面是一个使用C++实现的案例代码:

#include <iostream>
#include <unordered_map>

int findChairman(const std::unordered_map<int, int>& relations) {
    std::unordered_map<int, bool> hasSuperior; // 用于记录一个人是否有上级

    // 遍历上下级关系,构建上级-下级关系映射表
    for (auto it = relations.begin(); it != relations.end(); ++it) {
        int subordinate = it->first;
        int superior = it->second;
        hasSuperior[subordinate] = true; // 表明此人有上级
        if (hasSuperior.find(superior) == hasSuperior.end()) {
            // 如果上级不在表中,表明上级没有上级,即上级就是董事长
            return superior;
        }
    }

    // 如果没有找到董事长,则没有人没有上级,即没有董事长
    return -1;
}

int main() {
    // 上下级关系:键为下级,值为上级
    std::unordered_map<int, int> relations = {{A, X}, {B, X}, {C, Y}, {D, Y}, {X, Z}, {Y, Z}};

    int chairman = findChairman(relations);
    if (chairman == -1) {
        std::cout << "没有董事长" << std::endl;
    } else {
        std::cout << "董事长是:" << chairman << std::endl;
    }

    return 0;
}

注意,在上面的代码中,我将人用数字表示,你可以根据实际情况将其替换为适当的类型。另外,这个例子中使用了unordered_map来实现哈希表,如果使用map,也可以得到相同的结果。

© 版权声明
THE END
喜欢就支持一下吧
点赞14赞赏 分享