牛牛的好朋友羊羊在纸上写了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)
- 输入包括2行:
-
输出描述:
在一行中输出所有可能是抹除掉的数,从小到大输出,用空格分割,行末无空格。如果没有可能的数,则输出mistake -
输入例子:
2
3 6
输出例子:
mistake
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;
}
}