计算机复试笔试题(计算机复试笔试考什么)
前言:
题目还是比较基础的,但是第一题找规律有好多同学翻车了....
(ak代码由睿宝投稿)
第一题
小红和朋友玩游戏,棋盘为nxm的坐标轴有一颗棋子在坐标(1,1)的位置,每次可以向上或者向右移动奇数单位,不能移动到棋盘外面,无法行动就输了,小红先手,请问小红能否必胜。
输入描述
一行一个整数t,表示有t组数据。
接下来t行,每行两个整数n和m,表示棋盘大小。
1<=t<=10^4
1<=n,m <10^3
输出描述
对于每组数据,输出一行,如果小红必胜,输出”Yes”,否则输出”No”
示例1
输入
411144144
输出
NoYesYesNo
说明
样例一,棋盘大小为1x1,小红无法行动,输了。样例二,棋盘大小为1x4,小红第一次向右移动3个单位,小红获胜,朋友无法行动。样例三棋盘大小为4x1,小红第一次向上移动3个单位,小红获胜,朋友无法行动。
思路与代码
m+n为奇数为Yes,否则为No;
(1) 当m+n为奇数时,可以选择直接跳到偶数那一边的最后一格子,然后剩奇数格的那条边,这个时候无论后手走几步都无法到达死角;
(2)当m+n为偶数时,无论走几格,都会陷入对方先手的第一种情况,必输。
public static void main(String[] args) throws InterruptedException { Scanner sc = new Scanner(System.in); int t = sc.nextInt(); for (int i = 0; i < t; i++) { int n = sc.nextInt(); int m = sc.nextInt(); if ((m + n) % 2 == 1) { System.out.println("Yes"); } else { System.out.println("No"); } }}
第二题
小红有一个长度为n的排列,她可以选择两个位置,然后交换两个位置的数。
她想知道能否通过最多一次交换,使得存在一个连续子段,是长度为k的排列。
排列是指一个长度为 len的整数数组,数组中包含1到len的每个数,且每个数只出现一次。
输入描述
一行两个整数n,k,表示排列长度和连续子段长度。
一行n个整数a1,a2,...,an,表示排列。
1<=k<=n<=10^5
输出描述
如果能够通过最多一次交换,存在一个连续子段是排列,输出YES,并输出交换的位置:先输出一个整数x(0<=x<=1),然后输出x行,每行两个整数u,v,表示交换位置u,V。
否则输出NO。
示例1
输入
5 31 2 3 4 5
输出
YES0
说明
子段[1,2,3]是长度为3的排列。
思路与代码
暴力可以直接过的,应该有优化空间。枚举长度为k的子数组,记录1到k的出现频次,同时记录不合规位置的次数和下标,如果第一次出现大于k的数或者同一个数出现第二次,记录不合规的位置和次数,当第二次出现不合规的数时直接跳出循环,枚举下一个。当没有不合规位置时,输出YES;如果有一个不合规的,找到缺失的数值,使用预处理的1-k数字的下标list,遍历找到一个不在子串范围内的对应值的下标,如果找到了输出“YES”以及两者的下标。遍历结束程序未结束就直接输出“NO”。
public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int k = sc.nextInt(); int [] a = new int[n + 1]; Map<Integer, List<Integer>> map = new HashMap<>(); for (int i = 1; i <= n; i++) { a[i] = sc.nextInt(); if (a[i] <= k) { if (!map.containsKey(a[i])) map.put(a[i], new ArrayList<>()); map.get(a[i]).add(i); } } for (int i = 1; i <= n - k + 1; i++) { int count = 0; int index = -1; int [] p = new int[k + 1]; boolean flag = true; for (int j = i; j < i + k; j++) { if (a[j] > k) { if (count == 1) { flag = false; break; } else { count++; index = j; continue; } } p[a[j]]++; if (p[a[j]] >= 2) { if (count == 1) { flag = false; break; } else { index = j; count++; } } } if (flag) { if (count == 0) { System.out.println("YES"); System.out.println("0"); return; } else { int u = 0; for (int m = 1; m <= k; m++) { if (p[m] == 0) { u = m; break; } } int v = -1; for (int i1 : map.get(u)) { if (i1 < i || i1 >= i + k) { v = i1; break; } } if (v != -1) { System.out.println("YES"); System.out.println("1"); System.out.println(index + " " + v); } } } } System.out.println("NO");}
第三题
请你编写一个系统用来管理方法的重载和调用。
共有以下2种操作:
1.创建一个方法: 输入的格式为:“Type name(var1 a1,var2 a2......)”,大括号和方法里 内容被省略。
2调用一个方法 输入的格式为:"name(var1,var2......)”。
以上变量,vari代表变量类型,ai代表变量名,name代表方法名,Type代表返回类型,均为由小写字母组成的字符串。
请你在每次操作后给出系统反馈。
1.创建方法时,若创建成功,则输出一个字符串”ok."。否则输出一个字符串"method xxx is already defined."
2 调用方法时 若调用成功 则输H一个字符串"ok” 若方法名不存在,则输出"cannotfind symbol xxx."。若方法名存在但方法内部的变量类型错误,则输出"method xxx cannot be applied to given2 调用方法时 若调用成功 则输H一个字符串"ok” 若方法名不存在,则输出"cannotfind symbol xxx."。若方法名存在但方法内部的变量类型错误,则输出"method xxx cannot be applied to given types."。
输入描述
第一行输入一个正整数q,代表操作次数。
接下来的2*q行,每2行代表一次操作。
第一行为一个正整数op,代表操作类型
第二行为一个字符串,代表一次操作。
1<=q<=100
1<=op<=2
操作的字符串长度不超过100,且格式保证合法。
输出描述
输出q行字符串,代表每次操作系统的反馈。
示例1
输入
71int f(int x)1int g(int x,String s)2f()1void f(double x,double y)2f(double,double)2solve(int,String)1void f(int y)
输出
ok.ok.method f cannot be applied to given typesok.Ok.cannot find symbol solve.method f is already defined.
思路与代码
模拟。用HashMap<String, List<List>>记录每个操作的名字对应的参数列表。对于操作一,先检查有没有同名方法,没有的话就直接加入参数列表,操作成功;如果有同名方法,遍历检查是否存在参数类型完全一致的方法,如果有就操作失败,否则加入列表,操作成功。对于操作二,先检查有没有同名方法,没有的话就操作失败,有的话遍历检查是否存在参数类型完全一致的方法,如果有就操作成功,否则操作失败。
public static void main(String[] args) { Scanner sc= new Scanner(System.in); Map<String, List<List<String>>> map = new HashMap<>(); int q = sc.nextInt(); for (int l = 0; l < q; l++) { int op = sc.nextInt(); sc.nextLine(); String [] operate = sc.nextLine().split("\\("); String method ; if (op == 1) { method = operate[0].split(" ")[1]; } else { method = operate[0]; } String [] params = operate[1].substring(0, operate[1].length() - 1).split(","); if (op == 1) { if (map.containsKey(method)) { List<String> paramsList = new ArrayList<>(); for (String param : params) { paramsList.add(param.split(" ")[0]); } boolean flag = false; int size1 = paramsList.size(); for (List<String> list : map.get(method)) { if (list.size() != size1) { continue; } boolean flag2 = true; for (int i = 0; i < size1; i++) { if (!paramsList.get(i).equals(list.get(i))) { flag2 = false; break; } } if (flag2) { flag = true; break; } } if (flag) { System.out.println("method " + method + " is already defined."); } else { map.get(method).add(paramsList); System.out.println("ok."); } } else { map.put(method, new ArrayList<>()); List<String> paramsList = new ArrayList<>(); for (String param : params) { paramsList.add(param.split(" ")[0]); } map.get(method).add(paramsList); System.out.println("ok."); } } else { if (!map.containsKey(method)) { System.out.println("cannot find symbol " + method + "."); } else { List<String> paramsList = new ArrayList<>(Arrays.asList(params)); boolean flag = false; for (List<String> list : map.get(method)) { if (list.size() != paramsList.size()) { continue; } boolean flag2 = true; for (int i = 0; i < list.size(); i++) { if (!list.get(i).equals(paramsList.get(i))) { flag2 = false; break; } } if (flag2) { flag = true; break; } } if (flag) { System.out.println("ok."); } else { System.out.println("method " + method + " cannot be applied to given types."); } } } } }
最后插一下我们的进阶一对一辅导啦
我们是一个针对技术岗(前后端开发、测试、测开、大数据开发)校招一对一进阶提高的工作室。我们从2020年2月份开始,迄今整整三年的时间,带领300+学员斩获1500+大厂offer,参加活动的同学人均5个中大厂offer以上,以下是我们活动内容的介绍!
万诺coding
我们主要是针对有一定基础的同学提供一对一笔试和面试辅导,针对每个同学不同的情况定制内容,包括但不限于“数据结构与算法”/“计算机基础知识”/“项目梳理”/“面试技巧”/“面试复盘”等内容。
摸底测试:如果有兴趣深入了解我们的活动,需要先参加我们的“摸底测试”(类似面试),方便我们了解你的具体情况(主要是code能力和计算机素养),定制出相应的辅导计划。同时这也是一个双向筛选的过程,如果基础过差的同学,抱歉我们可能无法辅导(基础过差的同学一对一辅导成本过高,对双方都不适合);摸底测试通过的同学,我们会定制化一个针对性的提高计划。然后你再考虑是否参加我们的活动。
承诺保offer:通过摸底测试后,我们会针对每个同学的情况给定一个“保offer”计划。然后同学可以根据自己的实际情况考虑参不参加我们的活动。
免责声明:本文为转载,非本网原创内容,不代表本网观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
-
剑桥申请 研究生?牛津剑桥研究生
一、怎么考剑桥大学1.充分准备:剑桥大学的录取标准非常严格,因此考生需要充分准备,以确保自己能够达到剑桥大学的要求。2.参加考试:考生需要参加剑桥大学的入学考试,包括UCAS申请,剑桥大学的入学考试,[详细] -
华盛顿大学西雅图 研究生(西华盛顿大学)
一、华盛顿大学西雅图分校研究生录取GPA是多少,我想申请统计专业,或者靠近经济专业的专业,GPA要求是1、TOEFL网考至少92分;IELTS总分至少7分;MLT至少90分;PTE至少65分。2、正规[详细] -
化学研究生全国排名?西南科技大学研究生院
一、化学工程与工艺考研学校排名化学工程与工艺考研学校新排名:清华大学;二、化学专业研究生大学排名化学研究生院校专业排名:1中国科学院大学,2清华大学,3北京大学,4浙江大学,5南开大学,6复旦大学,7[详细] -
旧金山大学研究生,旧金山大学分析学硕士
一、旧金山大学有几个校区旧金山大学(SanFranciscoUniversity)是一所位于美国加利福尼亚州旧金山市的私立大学,该校只有一个校区,位于市内的LoneMountain区,占地面积55英亩[详细] -
健康服务与管理研究生?健康管理大专出来有用吗
一、健康信息与社会服务硕士就业前景1、就业前景很好。我国健康管理行业发展异常迅猛,目前国内已有超过3000家专业的健康管理公司,其中有数家已经获得数千万美元巨额投资。2、健康管理作为一种最具活力的健康[详细]