第一题:输入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;
}
第三题是村庄规划最短路径,我太菜了就没写出来
#华为笔试##华为机试##华为招聘#