首页 >  教育 >

计算机复试笔试题(计算机复试笔试考什么)

发布时间:2024-01-09 08:51:13来源:网络转载浏览量:0   

前言:

题目还是比较基础的,但是第一题找规律有好多同学翻车了....

(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、健康管理作为一种最具活力的健康[详细]