华为上机题汇总(十五)
来源:互联网 发布:四知文言文答案 编辑:程序博客网 时间:2024/06/05 17:52
华为上机题汇总(十五)
注:编译环境为Visual Studio 2012,答案仅供参考。
目录
- 华为上机题汇总十五
- 目录
- 第七十一题
- 第七十二题
- 第七十三题
- 第七十四题
- 第七十五题
第七十一题
71.渡口问题:
同类车辆先来先上,客车优于货车,客车上了4辆后才可以上货车,客车不足4辆可用货车补充。
客车为0,货车为1
输入:5 00101 输出:01324
#include <iostream>#include <queue>#include <vector>using namespace std;void Seq(queue<int> &cars, queue<int> &trucks, vector<int> &result){ int count = 0; while (!cars.empty() && !trucks.empty()) { if (count == 4) { result.push_back(trucks.front()); trucks.pop(); count = 0; } else { result.push_back(cars.front()); cars.pop(); count++; } } while (!cars.empty()) { result.push_back(cars.front()); cars.pop(); } while (!trucks.empty()) { result.push_back(trucks.front()); trucks.pop(); }}int main(){ queue<int> cars, trucks; vector<int> result; int n; cin >> n; for (int i = 0; i < n; i++) { bool num; cin >> num; if (num) { trucks.push(i); } else { cars.push(i); } } Seq(cars,trucks,result); for (unsigned i = 0; i < result.size(); i++) { cout << result[i] << " "; } cout << endl; return 0;}
第七十二题
72.求两个整型数组的异集,即A+B-(A与B的交集)
#include <iostream>using namespace std;int cmp(const void *a, const void *b){ return *(int*)a - *(int*)b;}void intersection(int *a1, int l1, int *a2, int l2, int *output){ qsort(a1,l1,sizeof(int),cmp); qsort(a2,l2,sizeof(int),cmp); int b1 = 0, b2 = 0; while (b1 != l1 && b2 != l1) { if (a1[b1] < a2[b2]) { *output++ = a1[b1++]; } else if (a1[b1] > a2[b2]) { *output++ = a2[b2++]; } else { *output++ = a1[b1++]; b2++; } } while (b1 != l1) { *output++ = a1[b1++]; } while (b2 != l2) { *output++ = a2[b2++]; }}
第七十三题
73.输入包括多个行数,首先给出整数N(1<N<10000)
,接着给出N行文字,每一行文字至少包括一个字符,至多100个字符。如果给定文字中“t”(或“T”)的出现次数比“s”(或“S”)多,则可能为英文,否则可能为德文。输出包括一行,如果输入文字可能为英文,则输出English,否则输出Deutsch。
#include <iostream>#include <string>using namespace std;bool judge(const string &s){ int tCount = 0, sCount = 0; for (unsigned i = 0; i < s.size(); i++) { if (s[i] == 't' || s[i] == 'T') { tCount++; } else if (s[i] == 's' || s[i] == 'S') { sCount++; } } return tCount > sCount;}int main(){ int n; cin >> n; cin.get(); while (n-- > 0) { string s; getline(cin,s); if (s.empty() || s.size() > 100) { cout << "Error" << endl; } else { cout << (judge(s) ? "English" : "Deutsch") << endl; } }}
第七十四题
74.飞机最少换乘次数问题
描述
设有n个城市,编号为0~n-1,m条单向航线的起点和终点由输入提供,寻找一条换乘次数最少的线路方案。
输入
第一行为三个整数n、m、v,表示城市数、单向航线数和起点城市。以下m行每行两个整数,表示一条边的起点、终点,保证不重复、不失败。2≤n≤20,1≤m≤190
输出
共n-1行,分别是从起点城市v到其他n-1个城市最少换乘次数,按照终点城市序号从小到大顺序输出,不能抵达时输出-1。
样例输入
3 2 0
0 1
1 2
样例输出
1
2
#include <iostream>#include <vector>using namespace std;bool canVisit(const vector<int> &v, int index){ for (unsigned i = 0; i < v.size(); i++) { if (index == v[i]) { return false; } } return true;}bool findWay(int current, const int end, int n, const vector<vector<int> > &map, vector<int> hasVisit, int &min){ if (current == end) { int size = hasVisit.size() - 1; if (size < min) { min = size; } return true; } bool flag = false; for (int i = 0; i < n; i++) { if (map[current][i] == 1 && canVisit(hasVisit,i)) { vector<int> tmp = hasVisit; tmp.push_back(i); flag |= findWay(i,end,n,map,tmp,min); } } return flag;}int main(){ int n, m, start; cin >> n >> m >> start; vector<int> v(n,0); vector<vector<int> >map(n,v); while (m-- > 0) { int i1, i2; cin >> i1 >> i2; map[i1][i2] = 1; } for (unsigned i = 0; i < v.size(); i++) { if (i == start) { continue; } vector<int> hasVisit; hasVisit.push_back(start); int min = n; if (findWay(start,i,n,map,hasVisit,min)) { cout << min << endl; } else { cout << "-1" << endl; } }}
第七十五题
75连通OR不连通
描述
给定一个无向图,一共n个点,请编写一个程序实现两种操作:
D x y 从原图中删除连接x,y节点的边。
Q x y 询问x,y节点是否连通
输入
第一行两个数n,m(5<=n<=40000,1<=m<=100000)
接下来m行,每行一对整数 x y (x,y<=n),表示x,y之间有边相连。保证没有重复的边。
接下来一行一个整数 q(q<=100000)
以下q行每行一种操作,保证不会有非法删除。
输出
按询问次序输出所有Q操作的回答,连通的回答C,不连通的回答D
样例输入
3 3
1 2
1 3
2 3
5
Q 1 2
D 1 2
Q 1 2
D 3 2
Q 1 2
样例输出
C
C
D
#include <iostream>#include <vector>using namespace std;int main(){ int n, m, q; cin >> n >> m; vector<int> v(n,0); vector<vector<int> >map(n,v); while (m-- > 0) { int i1, i2; cin >> i1 >> i2; map[i1-1][i2-1] = 1; map[i2-1][i1-1] = 1; } cin >> q; while (q-- >0) { char c; int i1, i2; cin >> c >> i1 >> i2; if (c == 'Q') { cout << (map[i1-1][i2-1] ? "C" : "D") << endl; } else if(c == 'D') { map[i1-1][i2-1] = 0; map[i2-1][i1-1] = 0; } }}
- 华为上机题汇总(十五)
- 华为上机题汇总
- 华为上机题汇总(一)
- 华为上机题汇总(二)
- 华为上机题汇总(三)
- 华为上机题汇总(四)
- 华为上机题汇总(五)
- 华为上机题汇总(六)
- 华为上机题汇总(七)
- 华为上机题汇总(八)
- 华为上机题汇总(九)
- 华为上机题汇总(十)
- 华为上机题汇总(十一)
- 华为上机题汇总(十二)
- 华为上机题汇总(十三)
- 华为上机题汇总(十四)
- 华为上机题汇总(十六)
- 华为上机题汇总(十七)
- java中的vo 、dto 、dao
- 对称加密与非对称加密
- 51nod 1352 扩展欧几里得解不定方程
- POJ 3748 位操作(位运算)
- POJ 2349 Arctic Network (Kruskal) .
- 华为上机题汇总(十五)
- 【CQOI 2012】【BZOJ 2669】【JZOJ 4700】 Garden
- Android 命令行手动编译打包详解
- 学好hibernate系列之了解hibernate配置文件
- Game
- zabbix3.0 微信报警
- [leetcode]231. Power of Two/326. Power of Three -- JavaScript 代码
- 浅谈攻击Web应用常见的技术手段
- Mysql数据库的安装及管理