昨晚笔试,今天来做笔试总结
选择题:刚开始是非技术的选择题
技术性选择题
编程题
首先记编程题:
题目好像是:一同学跑绕n*n的格子外围跑步,每次跑n+1步,然后在第n+1步的地方做一标记,问其做第几个标记的时候遇到重复标记的情况(包括重复格子那一次)。
输入:两行,第一行表示有m种格子操场
第二行表示格子的规模,即各种格子操场的n
输出:m行,每一行对应一种格子操场的标记次数
如输入:
2
4 8
输出:
17
33
思路:首先,这是一个循环遍历格子的过程,而且统计第一次重复遍历同一格时已经标记过的格子数。
故采用取余和map接口的方法进行程序编写,代码如下:
1 import java.util.ArrayList; 2 import java.util.Arrays; 3 import java.util.List; 4 import java.util.Map; 5 import java.util.Scanner; 6 import java.util.TreeMap; 7 8 public class Main { 9 public static void main(String[] args) { 10 Scanner sc = new Scanner(System.in); 11 Main aa = new Main(); 12 int n = sc.nextInt(); 13 if (n == 0) 14 System.out.println(0); 15 int[] a = new int[n]; 16 while (sc.hasNextInt()) {//注意while处理多个case 17 int b = aa.dianshu(sc.nextInt()); 18 System.out.println(b); 19 } 20 } 21 public int dianshu(int n){ 22 if (n == 0){ 23 return 0; 24 } 25 Map<Integer, Integer> map = new TreeMap<Integer, Integer>();//利用map键值对的不可重复性来进行判断 26 while(true){ 27 for(int i=0;i%(n*4)<=n*n+1;i=i+n+1){ 28 int s = i%(n*4);//取余操作 29 if(map.containsKey(s)){ 30 return map.size()+1; 31 } 32 else{ 33 map.put(s, 1); 34 } 35 } 36 } 37 } 38 }
如有纰漏,望提出。
然后是选择题中自己不熟悉的一些知识点:
1.无向图的深度遍历
2.for循环的实际执行过程
3.异常抛出时的过程
4.重载、覆盖
5.多态中子类和父类的关系
6.protected和private的访问权限