腾讯2020暑期实习4.26在线笔试编程题

前言

腾讯2020暑期实习笔试在4.26号进行,总共有5道编程题,其中两道是数据结构中的队列和栈的考察。这里我只截了4道题的图,第一道题的队列会用就行了,按照要求处理输入和输出。这里我也给出一些题的代码,虽然不是最优的,但是能解决问题。

用栈实现队列

腾讯2020暑期实习4.26在线笔试编程题_第1张图片   腾讯2020暑期实习4.26在线笔试编程题_第2张图片

 

最接近点对问题

腾讯2020暑期实习4.26在线笔试编程题_第3张图片   腾讯2020暑期实习4.26在线笔试编程题_第4张图片

#include 
#include 
using namespace std;

struct Node
{
	int x;
	int y;
};

int main()
{
	int n;
	int m;
	cin >> n;
	while(n--)
	{
		cin >> m;
		Node *p = new Node[m];
		Node *q = new Node[m];
		double min = 999;
		double asd;
		for(int i = 0; i < m; ++i)
		{
			cin >> p[i].x >> p[i].y; 
		}

		for(int i = 0; i < m; ++i)
		{
			cin >> q[i].x >> q[i].y;
		}

		for(int i = 0; i < m; ++i)
		{
			for(int j = 0; j < m; ++j)
			{
				asd = sqrt((p[i].x - q[j].x)*(p[i].x - q[j].x) + (p[i].y - q[j].y)*(p[i].y - q[j].y));
				if(asd < min)
					min = asd;  
			}
		}
		cout << min <

 

寻找祖父结点

腾讯2020暑期实习4.26在线笔试编程题_第5张图片   腾讯2020暑期实习4.26在线笔试编程题_第6张图片

#include 
using namespace std;

int main()
{
	int n;
	int x,y;
	int k,height;
	cin >> n;

	while ( n-- > 0)
	{
		cin >> x;
		cin >> k;
		height = 0;
		y = x;
		while(x > 0)
		{
			x /= 2;
			height++;
		}
		if(k >= height)
			cout << "-1" < k)
			{
				y /= 2;
				height--;
			}
			cout << y <

 

交换翻转扑克牌

腾讯2020暑期实习4.26在线笔试编程题_第7张图片   腾讯2020暑期实习4.26在线笔试编程题_第8张图片

#include 
using namespace std;

#define M 18
int N;
int a[M] = {0};
int b[M] = {0};
int ccount = 0, bestcount = 999;

int Abc(int a[], int b[])
{
	int flag = 0;
    int flag1 = 0;
	for(int i = 0; i < N; ++i)
	{
		if(a[i+1] > a[i])
			flag = 1; 
	}
	
	for(int i = 0; i < N; ++i)
	{
		if(b[i+1] > b[i])
			flag1 = 1; 
	}

	return flag && flag1;
}

int Asd(int n)
{
	int temp;
	if(n > N-1)
	{
		int x1;
		x1 = Abc(a, b);
		if(x1 == 1 && bestcount > ccount)
		{
			bestcount = ccount;
		}
		return bestcount;	
	}
	
	temp = a[n];
	a[n] = b[n+1];
	b[n+1] = temp;
	
	temp = a[n+1];
	a[n+1] = b[n];
	b[n] = temp;
	ccount++;
	Asd(n+1);
	
	temp = a[n];
	a[n] = b[n+1];
	b[n+1] = temp;
	
	temp = a[n+1];
	a[n+1] = b[n];
	b[n] = temp;
	ccount--;
	Asd(n+1);
	
	return bestcount;
}

int main()
{
	int x;
	cout << "输入N:";
	cin >> N;
	for(int i = 0; i < N; ++i)
	{
		cin >> x;
		a[i] = x;
	}
	
	for(int i = 0; i < N; ++i)
	{
		cin >> x;
		b[i] = x;
	}

	int sum = Asd(0);
	cout << sum <

 

总结

回过头来看这些题,光想着解决问题不算难,大多可以使用蛮力法暴力破解。但是在考试的时候,人的脑袋就不灵光了,像树和扑克牌问题我都是后面做出来的。我真的很无语,当时看到树的题,我第一想法就是放弃,因为我本身对树的编程就不太熟悉。结束后才发现,那是一道数学题...

不过这次笔试还是有收获的,以往对算法学习的不多,也没有刷算法题。面对问题的时候容易紧张,导致自己思考问题的点都出错了。以后还是要加强对算法的学习,像动态规划、分支限界等。这次笔试中的最接近点对问题是一个很经典的问题,复杂一点的空间中的最接近点对问题。蛮力法虽能解决问题,但考试的时候已经明确给出了不同语言的时间和空间消耗的要求(截图的时候为了截题目就把那一部分给省略了),所以还要加强对算法的学习。

你可能感兴趣的:(C/C++,算法,笔试面试)