现在准备跳槽,面试准备必不可少。
想着之前找工作时,面试了那么多家,刷了那么多的面试题,看了那么多面经。现在过了这么久,该忘得都忘了。。。
虽然资料还在那,但是很散,当时也没写下啥心得。
所以打算现在开始有面试的话,就根据自己的面试情况复盘。
把笔试题,面试问到的内容和一些项目的东西记下来,方便以后回顾。
就相当于总结吧,然后可以在面试的时候手机放桌上开录音,录下来,回去复盘也好整理~
今天做的两笔试题,题目不算难,做了快两小时,走了很多弯路,还好是能用myeclipse,要是手写肯定gg,调错都不好调。
虽然感觉写的有点绕,但是结果是有了。。。。。毕竟算法这块还需要学习~
题目一:
小明的女朋友最喜欢在网上买买买了,可是钱包里钞票有限,不能想买啥就买啥。面对琳琅满目的物品,她想买尽可能多的种类,每种只买一件,同时总价格还不能超过预算上限。于是她请小明写程序帮她找出应该买哪些物品,并算出这些物品的总价格。
输入规范: 每个输入包含两行。第一行是预算上限。第二行是用空格分隔的一组数字,代表每种物品的价格。所有数字都为正整数并且不会超过10000。 输出规范: 对每个输入,输出应买物品的总价格。 输入示例1: 100 5050 输出示例1: 100 输入示例2: 188 5042915105631430 输出示例2: 160
解答: publicstaticvoidmain(String[]args){ Scannerinput=newScanner(System.in); intamount=Integer.parseInt(input.nextLine()); Stringprice=input.nextLine(); String[]priceArray=price.split(""); int[]arrs=newint[priceArray.length]; for(inti=0;i<priceArray.length;i++){ arrs[i]=Integer.parseInt(priceArray[i]); } for(inti=0;i<arrs.length-1;i++){ for(intj=0;j<arrs.length-1;j++){ if(arrs[j]>arrs[j+1]){ intteam=arrs[j]; arrs[j]=arrs[j+1]; arrs[j+1]=team; } } } inttotalAmount=0; for(intarr:arrs){ totalAmount+=arr; if(totalAmount>amount){ totalAmount=totalAmount-arr; } } System.out.println(totalAmount); }
结果:
总结:
因为太久没写过控制台输出,导致在输入那块绕了很久,要是直接写
intamount=input.nextInt(); Stringprice=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个,所以纸条上会写成: 2123393919 现在给定日期和需要传递的信息,请输出应该写在纸条上的编码。 输入规范: 每个输入包含两行。第一行是用空格分隔的两个数字,第一个数字是月份,第二个数字是日子。输入保证是一个合法的日期。 第二行为需要编码的信息字符串,仅由A~Z和空格组成,长度不超过1024个字符。 输出规范: 对每个输入,打印对应的编码,数字之间用空格分隔,每个输出占一行。 输入示例1: 11 HI 输出示例1: 1819 输入示例2: 38 HAPPY 输出示例2: 2123393919 输入示例3: 214 ILOVEYOU 输出示例3: 35251812293125231228
解答:
publicstaticvoidmain(String[]args){ Scannerinput=newScanner(System.in); Stringdate=input.nextLine(); intmonth=Integer.parseInt(date.split("")[0]); intday=Integer.parseInt(date.split("")[1]); Stringcontent=input.nextLine(); String[]codeTable={"ABCDEFGHI","JKLMNOPQR","STUVWXYZ*"}; intindexMon=month-1; intindexDay=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]=newString(charArrOne); codeTable[1]=newString(charArrTwo); codeTable[2]=newString(charArrThree); //再整体移动每组元素 codeTable=toStringArray(codeTable,indexMon); char[]contentArray=content.toCharArray(); //把空格换位* for(inti=0;i<contentArray.length;i++){ if(contentArray[i]==''){ contentArray[i]='*'; } } //将数组转为一个char数组,循环对比用户输入的内容 Stringstrs=newString(codeTable[0])+newString(codeTable[1])+newString(codeTable[2]); char[]strArr=strs.toCharArray(); Stringstr=""; for(inti=0;i<contentArray.length;i++){ for(intj=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); } publicstaticchar[]toCharArray(char[]strArr,intindex){ while(index>0){ chartemp=strArr[0]; for(inti=0;i<strArr.length;i++){ if(i<strArr.length-1){ strArr[i]=strArr[i+1]; } if(i==strArr.length-1){ strArr[i]=temp; } } index--; } returnstrArr; } publicstaticString[]toStringArray(String[]strArr,intindex){ while(index>0){ Stringtemp=strArr[0]; for(inti=0;i<strArr.length;i++){ if(i<strArr.length-1){ strArr[i]=strArr[i+1]; } if(i==strArr.length-1){ strArr[i]=temp; } } index--; } returnstrArr; }
结果:
总结:
这题的话写的优点复杂,感觉可以更简单点。但是一开始想着这思路就往下做了,或许是想复杂了。
然后再数组转换比较这饶了弯子了,花了点时间。在最后对比的时候之前用了三个双重循环,而且还影响了123的顺序,搞成一个之后下标又写错,i写成j的,反正是以后做完一个现在脑子运行下,仔细点,不要急。没啥难,顶多是知识点没接触过而已,会的就是会,以后多注意点细节。
最后,这尼玛找工作的这么多么,一家公司就这么多。。。
原创文章,作者:夜风博客,如若转载,请注明出处:https://www.homedt.net/43665.html