#腾讯笔试# 软件开发岗位 4月26笔试 部分题解
100, 0, 0, 100, 100
第一题:实现队列操作,输入“PUSH”时,将数插入队尾;输入“TOP”时,输出队首;输入“POP”时,弹出队首;输入“SIZE”,输出队列长度;输入“CLEAR”,清空队列
一开始用队列超时了,就换成了数组AC了
第二题:输入n,A集合中有n个点的坐标;B集合中有n个坐标,求A集合中某个点和B集合中的某个点之间的最小距离,即sqrt ( (x1-x2)^2+(y1-y2)^2 )最小
第四题:跟第一题类似,只是没有了清空队列,和求队列的长度,直接用队列A的
第五题:求二叉树中x个节点的k深度的祖父节点(二叉树中第一层为1,第二层为2,3第三层为4,5,6,7....以此类推)
AC,除以2就行了,不会超时,因为辣个K的取值其实就提示我们了,2的60次方差不多就是10的18次方,然后总的时间复杂度下来,也就10^4 * 60
#腾讯笔试##腾讯##笔试题目#
第一题:实现队列操作,输入“PUSH”时,将数插入队尾;输入“TOP”时,输出队首;输入“POP”时,弹出队首;输入“SIZE”,输出队列长度;输入“CLEAR”,清空队列
一开始用队列超时了,就换成了数组AC了
#include<bits/stdc++.h>
using namespace std;
#define INF 1e9
typedef long long ll;
typedef unsigned long long ull;
int main()
{
int t,n,x;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
int a[1005],len = 0,top = 0;
while(n--){
string s;
cin >> s;
if(s == "PUSH"){
cin >>x;
a[len++] = x;
}
else if(s == "TOP") {
if(len == 0) {
printf("-1\n");
top = 0;
}
else printf("%d\n",a[top]);
}
else if(s == "POP"){
if(len == 0) {
printf("-1\n");
top = 0;
}
else top++;
}
else if(s == "SIZE") printf("%d\n",len-top);
else if(s == "CLEAR") {
len = 0;
top = 0;
}
if(len == top){
len = 0;
top = 0;
}
}
}
return 0;
}
第二题:输入n,A集合中有n个点的坐标;B集合中有n个坐标,求A集合中某个点和B集合中的某个点之间的最小距离,即sqrt ( (x1-x2)^2+(y1-y2)^2 )最小
没整出来....
第三题:题都没来及看
#include<bits/stdc++.h>
using namespace std;
#define INF 1e9
typedef long long ll;
typedef unsigned long long ull;
int main()
{
int n,x;
scanf("%d",&n);
queue<int> q;
while(n--)
{
string s;
cin >> s;
if(s == "add")
{
cin >>x;
q.push(x);
}
else if(s == "peek")
{
if(q.empty()) printf("\n");
else printf("%d\n",q.front());
}
else if(s == "poll")
{
if(!q.empty()) q.pop();
}
}
return 0;
} 第五题:求二叉树中x个节点的k深度的祖父节点(二叉树中第一层为1,第二层为2,3第三层为4,5,6,7....以此类推)
AC,除以2就行了,不会超时,因为辣个K的取值其实就提示我们了,2的60次方差不多就是10的18次方,然后总的时间复杂度下来,也就10^4 * 60
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.PriorityQueue;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int q = in.nextInt();
while (q > 0) {
long x = in.nextLong();
int k = in.nextInt();
if(x == 1) {
System.out.println(-1);
}else {
int deep = 0;
for (double i = 1; i < 65; i++) {
if (x < Math.pow(2, i)) {
deep = (int)i;
break;
}
}
if(k >= deep) {
System.out.println(-1);
}else {
int len = deep-k;
while (len > 0) {
x = x>>1;
len--;
}
System.out.println(x);
}
}
q--;
}
}
}
查看21道真题和解析