牛牛的好朋友羊羊在纸上写了n+1个整数,羊羊接着抹除掉了一个整数,给牛牛猜他抹除掉的数字是什么。牛牛知道羊羊写的整数神排序之后是一串连续的正整数,牛牛现在要猜出所有可能是抹除掉的整数。例如:
10 7 12 8 11 那么抹除掉的整数只可能是9
5 6 7 8 那么抹除掉的整数可能是4也可能是9

  • 输入描述:
    • 输入包括2行:
      • 第一行为整数n(1 <= n <= 50),即抹除一个数之后剩下的数字个数
      • 第二行为n个整数num[i] (1 <= num[i] <= 1000000000)
  • 输出描述:
    在一行中输出所有可能是抹除掉的数,从小到大输出,用空格分割,行末无空格。如果没有可能的数,则输出mistake

  • 输入例子:

  • 1
    2
    2
    3 6

输出例子:
mistake

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

public class Main {
public static void main(String args[]) {
Scanner scanner = new Scanner(System.in);
int n = Integer.parseInt(scanner.nextLine());
String[] strings = scanner.nextLine().split(" ");
scanner.close();
int[] nums = new int[n];
for (int i = 0; i < n; i++) {
nums[i] = Integer.parseInt(strings[i]);
}
Arrays.sort(nums);
//如果序列中差值大于2的间隔数大于1,则该序列不满足条件
if (getMisCount(nums) > 1) {
System.out.println("mistake");
return;
}
ArrayList<Integer> target = new ArrayList<>();
if (ok(nums)) {
int min = nums[0] - 1;
int max = nums[n - 1] + 1;
if (min > 0)
target.add(min);
target.add(max);
display(target);
return;
}
for (int i = 0; i < n - 1; i++) {
int t = nums[i + 1] - nums[i];
if (t == 2) {
get(nums[i], nums[i + 1], target);
}
}
if (target.size() == 0) {
System.out.println("mistake");
} else {
display(target);
}
}

// 打印数组
static void display(ArrayList<Integer> arrayList) {
for (int i = 0; i < arrayList.size(); i++) {
System.out.print(arrayList.get(i));
if (i != arrayList.size() - 1) {
System.out.print(" ");
}
}
}

// 获取两个数之间的序列
static void get(int min, int max, ArrayList<Integer> arrayList) {
for (int i = min + 1; i < max; i++) {
if (i > 0)
arrayList.add(i);
}
}

// 判断序列是否满足差值为1
static boolean ok(int[] nums) {
boolean b = true;
for (int i = 0; i < nums.length - 1; i++) {
int t = nums[i + 1] - nums[i];
if (t != 1) {
b = false;
}
}
return b;
}

static int getMisCount(int[] nums) {
int count = 0;
for (int i = 0; i < nums.length - 1; i++) {
int t = nums[i + 1] - nums[i];
if (t == 2) {
count++;
}
}
return count;
}
}