#腾讯笔试# 软件开发岗位 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--; } } }