一、逻辑推理题*20
二、专业基础*30
考的比较杂,但是基本上不难
1、各种排序的时间空间复杂度
2、测试基本路径
3、居然考了编译原理
4、阅读代码
5、比较简单的基础题
三、编程题*2
1、给定字符串:包含‘0’~‘9’中任意个数的字符,输出该字符串不能组成的最小正整数
输入:123456789(字符串长度至少为1)
输出:10
解题思路:
首先,对各个数字出现的次数进行统计,用数组count[10]来记录
其次,总共分为两种情况:数字‘0’出现次数为0和不为0
count[0] = 0,又分为两种情况:
1)数字1~9都出现:找出出现次数count[i]最少的数字,若有多个则取最小的数字i,输出”iiiii“(次数为count[i]次)+”0“
2)数字1~9没有都出现:找出未出现的最小数字x,输出x
count[0] != 0情况
1)数字1~9都出现:找出出现次数最小且非0的数字x,输出count[x]+1次x
2)数字1~9没有都出现:找出次数为0且最小的数字输出
1 import java.util.Scanner; 2 3 4 public class Main { 5 public static void main(String[] args){ 6 Scanner sc = new Scanner(System.in); 7 String input = sc.next(); 8 int[] count = {0,0,0,0,0,0,0,0,0,0}; 9 10 for (int i = 0; i < input.length(); i++) { 11 count[input.charAt(i)-'0']++; 12 } 13 //找出出现次数最少且最小的数字 14 int min = 10,t=0,sum = 0; 15 for(int i = 1 ;i<count.length;i++) 16 { 17 if (count[i]!=0) sum++; 18 if(min>count[i]) { 19 min = count[i]; 20 t = i; 21 } 22 } 23 if(sum == 0) 24 { 25 System.out.println("1"); 26 return; 27 } 28 //无0的情况 29 StringBuilder str = new StringBuilder(); 30 if(count[0]==0) { 31 if(sum == 9) { 32 int k = count[t]; 33 while(k>0) { 34 str.append(t); 35 k--; 36 } 37 str.append(0); 38 System.out.println(str); 39 } 40 else 41 System.out.println(t); 42 } 43 //有0的情况 44 else { 45 if(sum == 9) { 46 int k = count[t]+1; 47 while(k>0) { 48 str.append(t); 49 k--; 50 } 51 System.out.println(str); 52 } 53 else System.out.println(t); 54 } 55 } 56 57 }
2、给一个圆,在圆上取n个点,每次取两个点连线,不能相交,最多能连多少条线?
输入:n(点的个数)
输出:x(最多能连多少条线)
2*n-3即可得