一、填空题40题。时间80分钟
和360实习的题目有一些是反复的。
牛客网题目地址:http://www.nowcoder.com/test/160402/summary。
二、两道编程题,时间70分钟,题目不是特别难,牛客网:http://www.nowcoder.com/test/151724/summary。
例如以下所看到的
第一道:
思路:
统计每一个字符出现的次数。然后遍历一次。找到第一个出现次数为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;
}更新:题目的意图事实上是不要把输入的数据保存下来,而直接通过一个一个字符的读取而找出第一次出现的字符。此时哈希表里存储的数字不仅代表出现的次数。
初始化哈希表的值为-1。
假设第一次出现,则把字符的位置存储下来。假设又出现了,则把哈希值置为-2,代表字符反复出现,此后不在考虑。
最后对哈希数组遍历。找出全部出现一次(哈希值>=0的)的字符的哈希值最小的(即位置最靠前的)即是所求的字符。
以下的代码能够通过牛客网的測试。
#include <iostream>
using namespace std;
void InsertStr(int (&str)[256], char c , int &index)
{
if(str[c] == -1)
str[c] = index;//第一次找到字符,则存储它的位置
else
if(str[c] >= 0)
{
str[c] = -2;//假设反复出现,则位置置为-2,表示出现多次,不予考虑
}
index++;
}
char FindFirstLetter(const int (&str)[256])
{
int minIndex = 0x7fffffff;
char result = '