https://www.nowcoder.com/share/jump/5761136381776948425416华为开发岗真题 做了半天第一题答案#include <cstdio>#include <iostream>#include <vector>#include <map>#include <string>using namespace std;//最后联盟的最终能量int endx=0;//定义一个函数来计算联盟的实力总值void addx(string name);//定义一个类存放各个星际的信息class xingji{public: string name;int x;map<string,int> fs;void setfirend(string friend1){if (!fs[friend1]==1) {fs[friend1]=1;}}//定义这个i主要是为了后续在计算联盟总能量时避免重复加同一个星际的等级int i=1;};//定义一个存放星际的数组v来记录每个星际对象vector<xingji> v;int main() {int n;cin>>n;//给容器v里放入我们的每个星际对象for(int i=0;i<n;i++){string name;int x;cin>>name>>x;xingji bobi;bobi.name=name;bobi.x=x;v.push_back(bobi);}//定义变量 星际轨道的数量int guidao;cin>>guidao;string name,friend1;for(int i=0;i<guidao;i++){cin>>name>>friend1;for(auto &gui:v){if(gui.name == name){gui.setfirend(friend1);}else if(gui.name == friend1){gui.setfirend(name);}}}//maxx表示等级最高星际在v容器里的下标,count主要用来记录循环的当前的下标,temp表示当前遇到过最大的等级是多少级int maxx=0,count=0,temp=0;//计算出等级最高的星际for(auto& gui:v){if(gui.x>temp){temp=gui.x;maxx=count;}count++;}addx(v[maxx].name);cout<<v[maxx].name<<" "<<endx;}//实现计算联盟总能量的函数void addx(string name) {//for循环区遍历找到最大等级的星际for (auto& xing:v) {if (xing.name==name && xing.i!=0) {endx+=xing.x;xing.i=0;if (!xing.fs.empty()) {for (auto& f:xing.fs) {//使用嵌套让盟友也以同样的方式加他盟友的实力addx(f.first) ;}}}}}