赞
踩
2019年8月31日下午,在南京,江苏电信组织之前全省的暑期实习生进行提前批选拔,这里就总结一下机试的三道大题:
先谈一谈做题目的感受,题目都不是很难,之前也有遇到过,但让人很难受的是,从算法函数到调用函数都需要自己写(和LeetCode和牛客只写方法函数不太一样)。笔者看到题目时都慌乱,界面一行代码都没有,全部手输,也不知道要写到啥程度。于是硬着头皮先写方法函数,写完就运行了一下,期望能有奇迹发生,结果是不行,就又写了主函数调用,外面也注明了类,然后跟着报错信息慢慢改,结果给调试出来了,一定要看报错信息,在不知道格式的情况下非常有用。后来才知道在进入考试前可以先阅读《查看编程须知》这里挂上网站https://qy.oxcoder.com.cn/program-help.html。笔者用的是Java,里面普通的方法,在平时IDE中代码提示时写代码很爽,考试时是没有代码提示的(这个到有心理准备,但还是准备不充分)。于是就出现了平时一个函数解决的问题,需要手动写好几行自己实现。平时用到很多的数组、List、字符串、Math等里的方法要非常熟悉。
1、题目大致思想是十进制数转十六进制数
public class Test1 { public static String intToHex(int n){ StringBuilder sb = new StringBuilder(); String s = "0123456789abcdef"; if(n<16){ return String.valueOf(s.charAt(n)); } while(n>=16){ int temp = n%16; n = n/16; sb.append(s.charAt(temp)); } sb.append(s.charAt(n)); return sb.reverse().toString(); } public static void main(String[] args) { int n = 155; System.out.println(intToHex(n)); } }
2、题目大致思想是数组排序,输出元素位置改变数的最小值。想着用sort函数排序,再判断变化的位置,但输入规定是用空格分隔的字符串,所以还要加一步字符串的分割与类型转换。
import java.util.Arrays; public class Test2 { public static int sortn(int n, String s){ String[] ss = s.split(" "); int stoi[] = new int[n]; for(int i=0; i<n; i++){ stoi[i] = Integer.parseInt(ss[i]); } int stoisort[] = Arrays.copyOf(stoi, n);//不能用int stoisort[] = stoi,只是引用的变化,实际都指向stoi。 Arrays.sort(stoisort); int count = 0; for(int i=0; i<n; i++){ if(stoi[i] != stoisort[i]){ count++; } } return count; } public static void main(String[] args) { int n = 6; String s = "7 6 8 10 5 9"; System.out.println(sortn(n, s)); } }
3、把一根绳子剪成多段,使每段的乘积最大。
解题思路,尽可能多的3,不能再分出3了,就剩2,剩余为4时,分出两个2.下面给出三种方法
public class Test3 { public static int breakLength(int n){ if(n<=4){return n;} int count1 = n/3; if(n-count1*3 == 1){count1--;} int count2 = (n-count1*3)/2; return (int)((Math.pow(3, count1))*(Math.pow(2, count2))); } //动态规划 public static int DynamicbreakLength(int n){ int dbl[] = new int[n+1]; dbl[1] = 1; for(int i=0; i<=n; i++){ for(int j=0; j<i; j++){ dbl[i] = Math.max(dbl[i], Math.max(j*(i-j), dbl[j]*(i-j))); } } return dbl[n]; } //递归 public static int devide(int n){ if(n<=4){ return n; }else{ return 3*devide(n-3); } } public static void main(String[] args) { int n = 19; System.out.println("n result is"+breakLength(n)); System.out.println("n result is"+DynamicbreakLength(n)); System.out.println("n result is"+devide(n)); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。