This page looks best with JavaScript enabled

连续整数

 ·  ☕ 2 min read

牛牛的好朋友羊羊在纸上写了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

  • 输入例子:

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;
	}
}
Support the author with
alipay QR Code
wechat QR Code

Yang
WRITTEN BY
Yang
Developer