一、填空题40题,时间80分钟
和360实习的题目有一些是重复的。可以参考牛客网:http://www.nowcoder.com/。
二、两道编程题,时间70分钟,题目不是特别难,如下所示
第一道:
思路:
统计每个字符出现的次数。然后遍历一次,找到第一个出现次数为1的字符。在我的vs上调试可以通过,但是到360里面的编辑器就不行了,说是超时。从题目的hint里可以看出可能是从终端接收数据出问题。本想一个一个字符接收的,最后时间不够了。还没解决。下面贴出没有通过的代码。
代码:
#include<iostream>
#include<string>
//#include<vector>
using namespace std;
int main()
{
int num;
cin>>num;
string str;
while(num > 0)
{
num--;
getline(cin , str);
int len = str.size();
int strmap[256] = {0};
int pos = -1;
for(int i = 0 ; i < len ; i++)
{
strmap[str[i]]++;//统计每个字符出现的次数
}
for(int j = 0 ; j < len ; j++)
{
if(strmap[str[j]] == 1)
{
pos = j;//找到第一个只出现一次的字符
break;
}
}
if(pos != -1)
cout<<str[pos]<<endl;
}
return 0;
}
样例输入
3 2 0 3 2 1 2 3 2 4 5 1 1 2 1 3 1 4 1 3 3
0 1 2 1 1
构造一个邻接矩阵表示每个人之间的认识与否。比如graph[0][2] = 1 表示0认识2。然后遍历矩阵,镇长满足条件:1、所在行全为0(除了自己) 2、所在列全为1
注:下面的代码没有提交测试。
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main()
{
int groups;
cin>>groups;
while(groups > 0)
{
groups--;
int n , m;
cin >> n >> m;
vector<vector<bool> > graph(n , vector<bool>(n , false));
vector<int> result;
int tmp1 , tmp2;
for(int i = 0 ; i < m ; i++)
{
cin >> tmp1 >> tmp2;
graph[tmp1-1][tmp2-1] = true;
}
for(int i = 0 ; i < n ; i++)
{
bool flag = true;
for(int j = 0 ; j < n ; j++)
{
if(i != j && graph[i][j] == true || i != j && graph[j][i] == false)
{
flag = false;
break;
}
}
if(flag)
{
result.push_back(i);
}
}
if(result.empty())
cout<<0<<endl<<endl;
else
{
cout<<result.size()<<endl;
for(int i = 0 ; i < result.size() ; i++)
cout<<result[i]+1<<" ";
cout<<endl;
}
}
return 0;
}
版权声明:转载请注明出处。
原文:http://blog.csdn.net/u012243115/article/details/47427957