8.24华为软件笔试一些小思路,希望大家笔试顺利
第一题:输入N个随机内存数,求其中最大连续的第一位以及最大连续的数量
例如:
输入
4
1 3 2 5
输出
1 3
解答:
#include<bits/stdc++.h> using namespace std; int main() { int N,temp; cin>>N; vector<int> num for(int i=0;i<N;i++) { cin>>temp; num.push_back(temp); } sort(num.begin(),num.end()); int max=0,loc=0,count=1; for(int i=1;i<N;i++) { if(num[i+1]=num[i]+1) { count+=1; if(max<count) { max=count; loc=i; } } else count=1; } cout<<num[loc]-max+1<<' '<<max; return 0; }第二题:输入N组依赖关系,最多1000个元素,求其中是否存在循环(最多存在一条循环),存在则输出升序排列,反之输出NA;
原题输入的是字符串,我简略成了输入数字
输入
4
1 2
3 4
1 3
4 1
输出
1 3 4
#include <bits/stdc++.h> using namespace std; int main() { int N; cin>>N; vector< vector<int> > m(1000, vector<int>()); int a,b; vector<int> loc;//有输入的 vector<int> loc_zero;//无双向依赖的 vector<int> loc_two;//双向依赖的 while(cin>>a>>b) { m[a].push_back(b); m[b].push_back(-1*a); if(find(loc.begin(),loc.end(),a)==loc.end()) loc.push_back(a); if(find(loc.begin(),loc.end(),b)==loc.end()) loc.push_back(b); } for(int i=0;i<loc.size();i++) { if(m[loc[i]].size()<2||*max_element(m[loc[i]].begin(),m[loc[i]].end())<0||*min_element(m[loc[i]].begin(),m[loc[i]].end())>0) loc_zero.push_back(loc[i]); else loc_two.push_back(loc[i]); } int flag=1; while(flag>0) { int j=0; while(j<loc_two.size()) { int p=0; while(p<m[loc_two[j]].size()) { if(find(loc_zero.begin(),loc_zero.end(),m[loc_two[j]][p])!=loc_zero.end()) m[loc_two[j]].erase(m[loc_two[j]].begin()+p, m[loc_two[j]].begin()+p+1); else p=p+1; } if(m[loc_two[j]].size()<2||*max_element(m[loc_two[j]].begin(),m[loc_two[j]].end())<0||*min_element(m[loc_two[j]].begin(),m[loc_two[j]].end())>0) { loc_zero.push_back(loc_two[j]); flag=flag+1; loc_two.erase(loc_two.begin()+j, loc_two.begin()+j+1); } else j=j+1; } if(flag>1) flag=1; else flag=0; } if(loc_two.size()>0) { sort(loc_two.begin(),loc_two.end()); for(int p=0;p<loc_two.size();p++) cout<<loc_two[p]<<' '; } else cout<<"NA"; return 0; }第三题是村庄规划最短路径,我太菜了就没写出来