2016年秋季中兴校招笔试题
我报的是C++软件开发岗
有20个单选题,题目涉及软件开发设计,全是凭直觉选的,题目都是与软件的设计方案啥的有关
然后是两道编程题
一个是打印*号问题
输入一个数,在标准输出里打印一系列字符串,例如输入4
打印
1
2*3
4*5*6
7*8*9*10
7*8*9*10
4*5*6
2*3
1
void printNums(int num)
{
if (num < 0 || num > 100)
return;
int count = 0;
std::vector<std::string> res;
for (size_t i = 0; i < num; ++i)
{
std::string temp;
for (size_t j = 0; j <= i; ++j)
{
++count;
if (j == 0)
temp = std::to_string(count);
else
temp += "*" + std::to_string(count);
}
res.push_back(temp);
temp = "";
}
for (auto& number : res)
std::cout << number << std::endl;
//for (size_t i = res.size() - 1; i >= 0; --i)
std::vector<std::string>::reverse_iterator rit = res.rbegin();
for (; rit != res.rend();++rit)
std::cout << *rit << std::endl;
}
一个是FIFO的页数问题,统计未选中的总数,例如输入一个数组{1,2,3,1,2,1},FIFO缓冲大小为2,打印5
分析:
缓冲依次为
1 *
1,2 *
2,3 *
3,1 *
1,2 *
1.2
标星表明在缓冲中没找到对应的数,因为缓冲大小为2,所以最多容纳2个数,来一个数先查找是否在缓冲里,如果在,则表明选中,不在就放入缓冲,同时需要保证缓冲大小为2,弹出最先进队列的数
参考代码,没考虑复杂度
bool findNum(std::deque<int>& deq, int k)
{
bool res(false);
for (auto& num : deq)
if (num == k)
res = true;
return res;
}
int countFIFO(size_t max_cache_size, std::vector<int>& nums)
{
if (nums.size() <= 0 || max_cache_size <= 0) return 0;
std::deque<int> deq;
int count(0);
for (auto& num : nums)
{
if (!findNum(deq, num)) { ++count; deq.push_back(num); }
if (deq.size() > max_cache_size)
{
deq.pop_front();
deq.push_back(num);
}
}
return count;
}