荣耀笔试11.20 分享
软件开发岗。参与一下。分享一下代码。
第一题不知道哪里出问题了。一直是0。。很简单。感觉没错呀23333
大意就是输入字符串,比如1 2 3 4 5 6 7 8 9 0 3,输入从第K(>=1)个数开始,共输出后面的n个数。输出的数用分号隔开。每行只能输出20个数,每行的结尾不是’;‘就直接回车就好。若是超过数据量的大小了,k+n-1>实际数据量下标,就按照实际数据量输出即可
比如:1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4
2 25
输出:2;3;4;5;6;7;8;9;0;1;2;3;4;5;6;7;8;9;0;1
2;3;4
#include<iostream> #include<algorithm> #include<vector> #include<string> using namespace std; int main() { string num; getline(cin, num); vector<int>cup; int start, cnt; cin >> start >> cnt; start--; for (int i = 0; i < num.size(); i++) { int sum = 0; int j = i; while (j<num.size() && num[j] != ' ') { sum = 10 * sum + num[j] - '0'; j++; } //cout << sum << " "; if (j != i) { cup.push_back(sum); i = j; } } int flag = 0; int cntx = 0; for (int i = start; i < cup.size(); i++) { cout << cup[i] ; flag++; cntx++; if (cntx == cnt) break; if (flag == 20) { cout << endl; flag == 0; continue; } if(i!=cup.size()-1) cout << ";"; } return 0; }第二题走迷宫的最短步数问题,左上角到右下角,BFS结合queue即可,很基础,不妨代码了。
第三题 前置任务问题,利用图做即可。多了一步就是要输出,若是有环(即前置任务死循环),把环输出出来,空格隔开,并且id要从小到大排序。前面判断很基础,就是入读即可。输入输出比较烦。输入也为一个字符串个数。要求输出也是字符串。我比较懒,这边没改字符串,其实只要加一个to_string 即可。
输入:1:[2,3],4:[1],3:[4],2:[4]
输出:124 134
输入:1:[2,3],4:[1]
输出:OK
无死环循环任务(代码不保证正确性)
#include<queue> #include<iostream> #include<algorithm> #include<vector> #include<string> using namespace std; string s; vector<int>degree(110, 0); vector<vector<int>>graph(110); queue<int>q; void dfs(vector<int>& temp, int u, int t);//t表示的是start的id。u表示是当前的id int main() { cin >> s; //构造地图 for (int i = 0; i < s.size(); i++) { if (isdigit(s[i])) { //x为第一个被依赖的id int x = 0; int j = i; while (j < s.size() && isdigit(s[j])) { x = 10 * x + s[j] - '0'; j++; } //cout << x << endl; if (s[j] == ':') j+=2; while (j < s.size() && s[j] != ']') { int y = 0; while (j < s.size() && isdigit(s[j])) { y = 10 * y + s[j] - '0'; j++; } if (y > 0) { graph[x].push_back(y); degree[y]++; //cout << y << " "; } if (s[j] == ',') j++; else if (s[j] == ']') break; } i = j; } } queue<int>stk; for (int i = 0; i < 110; i++) { if (degree[i] == 0) stk.push(i); } while (stk.size()) { int index = stk.front(); stk.pop(); for (int i = 0; i < graph[index].size(); i++) { --degree[graph[index][i]]; if (degree[graph[index][i]] == 0) stk.push(graph[index][i]); } } vector<vector<int>> ans; for (int i = 0; i < 110; i++) { if (degree[i] != 0) q.push(i); } if (q.size() == 0) { cout << "OK" << endl; return 0; } while (q.size())//q里面的点都是度>0的 { int index = q.front(); if (degree[index] == 0) q.pop(); else { --degree[index]; if (degree[index] == 0) q.pop(); vector<int>temp; temp.push_back(index); for (int i = 0; i < graph[index].size(); i++) { if (degree[graph[index][i]] == 0) continue; else { dfs(temp, graph[index][i], index); } } } } cout << endl; return 0; } void dfs(vector<int>& temp, int u, int t) { --degree[u]; temp.push_back(u); for (int i = 0; i < graph[u].size(); i++) { if (graph[u][i] == t) { sort(temp.begin(), temp.end()); for (auto c : temp) cout << to_string(c); cout << " "; break; } if (degree[graph[u][i]] == 0) continue; else { dfs(temp, graph[u][i], t); } } temp.pop_back(); }