博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浙江创邻科技两道笔试题-附答案
阅读量:4156 次
发布时间:2019-05-25

本文共 5568 字,大约阅读时间需要 18 分钟。

刚做完,中午吃个饭,超时了。。不过也就试试,记录下我的答案。说不定有人要用得到呢是吧。

写的不好,还需要学习~

 

题目一:

 

 

 

小明的女朋友最喜欢在网上买买买了,可是钱包里钞票有限,不能想买啥就买啥。面对琳琅满目的物品,她想买尽可能多的种类,每种只买一件,同时总价格还不能超过预算上限。于是她请小明写程序帮她找出应该买哪些物品,并算出这些物品的总价格。

输入规范:每个输入包含两行。第一行是预算上限。第二行是用空格分隔的一组数字,代表每种物品的价格。所有数字都为正整数并且不会超过10000。输出规范:对每个输入,输出应买物品的总价格。输入示例1:10050 50输出示例1:100输入示例2:18850 42 9 15 105 63 14 30输出示例2:160
解答:public static void main(String[] args) {        Scanner input = new Scanner(System.in);        int amount = Integer.parseInt(input.nextLine());        String price = input.nextLine();        String[] priceArray = price.split(" ");        int[] arrs = new int[priceArray.length];        for (int i = 0; i < priceArray.length; i++) {            arrs[i] = Integer.parseInt(priceArray[i]);        }        for (int i = 0; i < arrs.length - 1; i++) {            for (int j = 0; j < arrs.length - 1; j++) {                if (arrs[j] > arrs[j + 1]) {                    int team = arrs[j];                    arrs[j] = arrs[j + 1];                    arrs[j + 1] = team;                }            }        }        int totalAmount = 0;        for (int arr : arrs) {            totalAmount += arr;            if (totalAmount > amount) {                totalAmount = totalAmount - arr;            }        }        System.out.println(totalAmount);    }

结果:

]5R@SQ{ZD{DHJQ{U}$$[67P.png

总结:

因为太久没写过控制台输出,导致在输入那块绕了很久,要是直接写

int amount = input.nextInt();String price = input.nextLine();

会报错,应该是回车的问题,输入了第一行直接回车就报错了,

如果用next()会当成一行算。

还有就是冒泡排序那写的好像和以前不同,但是有说不上来。。。

 

题目二:

李雷和韩梅梅坐前后排,上课想说话怕被老师发现,所以改为传小纸条。为了不被老师发现他们纸条上说的是啥,他们约定了如下方法传递信息:将26个英文字母(全为大写),外加空格,一共27个字符分成3组,每组9个。也就是ABCDEFGHI是第一组,JKLMNOPQR是第二组,STUVWXYZ*是第三组(此处用*代表空格)。然后根据传递纸条那天的日期,改变字母的位置。先根据月份数m,以整个分组为单位进行循环左移,移动(m-1)次。然后根据日期数d,对每个分组内的字符进行循环左移,移动(d-1)次。以3月8日为例,首先移动分组,3月需要循环左移2次,变成:STUVWXYZ*,ABCDEFGHI,JKLMNOPQR然后每组内的字符,8日的话需要循环左移7次,最终的编码为:Z*STUVWXY,HIABCDEFG,QRJKLMNOP对于要传递信息中的每个字符,用组号和组内序号两个数字来表示。如果在3月8日传递信息“HAPPY”,那么H位于第2组的第1个,A位于第2组第3个,P位于第3组第9个,Y位于第1组第9个,所以纸条上会写成:21 23 39 39 19现在给定日期和需要传递的信息,请输出应该写在纸条上的编码。输入规范:每个输入包含两行。第一行是用空格分隔的两个数字,第一个数字是月份,第二个数字是日子。输入保证是一个合法的日期。第二行为需要编码的信息字符串,仅由A~Z和空格组成,长度不超过1024个字符。输出规范:对每个输入,打印对应的编码,数字之间用空格分隔,每个输出占一行。输入示例1:1 1HI输出示例1:18 19输入示例2:3 8HAPPY输出示例2:21 23 39 39 19输入示例3:2 14I LOVE YOU输出示例3:35 25 18 12 29 31 25 23 12 28

解答:

public static void main(String[] args) {        Scanner input = new Scanner(System.in);        String date = input.nextLine();        int month = Integer.parseInt(date.split(" ")[0]);        int day = Integer.parseInt(date.split(" ")[1]);        String content = input.nextLine();        String[] codeTable = {"ABCDEFGHI", "JKLMNOPQR", "STUVWXYZ*"};        int indexMon = month - 1;        int indexDay = day - 1;        char[] charArrOne = codeTable[0].toCharArray();        char[] charArrTwo = codeTable[1].toCharArray();        char[] charArrThree = codeTable[2].toCharArray();        // 因为每一组的里的每个元素都会向左移动(d-1)次,故而先移动组内元素        charArrOne = toCharArray(charArrOne, indexDay);        charArrTwo = toCharArray(charArrTwo, indexDay);        charArrThree = toCharArray(charArrThree, indexDay);        // 将组内移动完成的元素组成新的数组        codeTable[0] = new String(charArrOne);        codeTable[1] = new String(charArrTwo);        codeTable[2] = new String(charArrThree);        // 再整体移动每组元素        codeTable = toStringArray(codeTable, indexMon);        char[] contentArray = content.toCharArray();                //把空格换位*         for (int i = 0; i < contentArray.length; i++) {            if (contentArray[i] == ' ') {                contentArray[i] = '*';            }        }        // 将数组转为一个char数组,循环对比用户输入的内容        String strs = new String(codeTable[0]) + new String(codeTable[1]) + new String(codeTable[2]);        char[] strArr = strs.toCharArray();        String str = "";        for (int i = 0; i < contentArray.length; i++) {            for (int j = 0; j < strArr.length; j++) {                // 当用户输入的字符等于第一组中元素时,输出1+(j下标0开始到8结束 ,需加1)                if (contentArray[i] == strArr[j] && j < 9) {                    str = str + "1" + (j + 1) + " ";                }                // 当用户输入的字符等于第二组中元素时,输出2+(j下标9开始到17结束 ,需加1再减9,即j-8)                if (contentArray[i] == strArr[j] && j < 18 && j >= 9) {                    str = str + "2" + (j - 8) + " ";                }                // 当用户输入的字符等于第三组中元素时,输出3+(j下标19开始到26结束 ,需加1再减18,即j-17)                if (contentArray[i] == strArr[j] && j < 27 && j >= 18) {                    str = str + "3" + (j - 17) + " ";                }            }        }        System.out.println(str);           }    public static char[] toCharArray(char[] strArr, int index) {        while (index > 0) {            char temp = strArr[0];            for (int i = 0; i < strArr.length; i++) {                if (i < strArr.length - 1) {                    strArr[i] = strArr[i + 1];                }                if (i == strArr.length - 1) {                    strArr[i] = temp;                }            }            index--;        }        return strArr;    }    public static String[] toStringArray(String[] strArr, int index) {        while (index > 0) {            String temp = strArr[0];            for (int i = 0; i < strArr.length; i++) {                if (i < strArr.length - 1) {                    strArr[i] = strArr[i + 1];                }                if (i == strArr.length - 1) {                    strArr[i] = temp;                }            }            index--;        }        return strArr;    }

 

结果:

M8AG}9_0)PUA7ZI1DY679NC.png

 

总结:

这题的话写的优点复杂,感觉可以更简单点。但是一开始想着这思路就往下做了,或许是想复杂了。

然后再数组转换比较这饶了弯子了,花了点时间。在最后对比的时候之前用了三个双重循环,而且还影响了123的顺序,搞成一个之后下标又写错,i写成j的,反正是以后做完一个现在脑子运行下,仔细点,不要急。没啥难,顶多是知识点没接触过而已,会的就是会,以后多注意点细节。

转载地址:http://nhwxi.baihongyu.com/

你可能感兴趣的文章
素数对--腾讯2017校招编程
查看>>
JAVA集合--ArrayList实现原理
查看>>
synchronized与Lock
查看>>
数据库索引
查看>>
实现包含min,max,push,pop函数的栈
查看>>
实验2-6 字符型数据的输入输出
查看>>
实验3-5 编程初步
查看>>
实验4-1 逻辑量的编码和关系操作符
查看>>
实验5-2 for循环结构
查看>>
实验5-3 break语句和continue语句
查看>>
实验5-4 循环的嵌套
查看>>
实验5-5 循环的合并
查看>>
实验5-6 do-while循环结构
查看>>
实验5-7 程序调试入门
查看>>
实验5-8 综合练习
查看>>
第2章实验补充C语言中如何计算补码
查看>>
深入入门正则表达式(java) - 命名捕获
查看>>
使用bash解析xml
查看>>
android系统提供的常用命令行工具
查看>>
【Python基础1】变量和字符串定义
查看>>