牛牛的好朋友羊羊在纸上写了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.Arrays;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt(); //抹除一个数之后剩下的数字个数
        int[] num = new int[n];
        for (int i = 0; i < n; i ++) {
            num[i] = sc.nextInt();
        }
        //如果只有一个数字,注意保证输入正整数
        if (n == 1) {
            if (num[0] > 1) {
                System.out.println(num[0] - 1 + " " + (num[0] + 1));
                return;
            } else {
                System.out.println((num[0] + 1));
                return;
            }
        }
        //多个数字,先排序
        Arrays.sort(num);
        //如果有重复数字,则mistake
        for (int i = 0; i < n-1; i ++) {
            if (num[i] == num[i+1]) {
                System.out.println("mistake");
            }
        }
        //现在没有了重复数字,那么可以根据最大数num[n-1]和最小数num[0]的差值来比较,
        //这样去判断,中间数字是连续的,还是缺了一个,还是缺了多个
        if (num[n-1] - num[0] > n) {
            System.out.println("mistake");
        } else if (num[n-1] - num[0] == n) {
            for (int i = 0; i < n-1; i ++) {
                if (num[i] + 2 == num[i+1]) {
                    System.out.println(num[i] + 1);
                }
            }
        } else {
            if (num[0] > 1) {
                System.out.println(num[0] - 1 + " " + (num[n-1] + 1));
            } else {
                System.out.println((num[n-1] + 1));
            }
        }
    }
}
#include<iostream>
using namespace std;
int main() {
    int n;
    cin>>n;
    int min = 1000000001;
    int max = 0;
    int res = 0;
    int num = 0;
    for(int i = 0; i < n; i++) {
        cin>>num;
        if(num < min) min = num;
        if(num > max) max = num;
        res ^= num;
    }
    for(int i = min; i <= max; i++) {
        res ^= i;
    }
    if(res == 0) {
        if(min - 1> 0)
            cout<<min-1<<" "<<max+1;
        else cout<<max+1;
    }
    else if(res <= min || res >= max) {
        cout<<"mistake"<<endl;
    }
    else cout<<res;
}
#我来用python写一个,见识一下python的强大
def get_the_lose_one(data): data_ordered = sorted(data,lambda x,y:x-y) outcome= [] for index,data in enumerate(data_ordered): if index == len(data_ordered)-2: break if data+1 != data_ordered[index+1]: outcome.append(data+1) if len(outcome) >= 1: print 'mistake' elif not len(outcome): print [data_ordered[0]-1,data_ordered[len(data_ordered)-1]+1] else: print outcome[0]
/*
	5种情况
	1、内缺:
		i. 缺1个  			直接输出结果 
		ii. 缺多个(间接)	mistake 
		iii.缺多个(连续) 	mistake 
	2、 外缺:
		i.第一个元素==1		数列右边缺 
		ii.第一个元素>1 	数列左右都有可能缺 
*/
#include <iostream>
#include <algorithm>
using namespace std;
const int MAX_ = 50;
int arr[MAX_];
int main() {
    int n,count = 0,tmp;
    
    cin >> n;
    
    for(int i=0; i<n; i++) {
        cin >> arr[i];
    }
    
    sort(arr,arr+n);
    
    for(int i=1; i<n; i++) {
        if(arr[i]-arr[i-1] == 2) {
            tmp = arr[i] - 1;
            count++;
            continue;
        } else if(arr[i]-arr[i-1] > 2) {	// 缺多个(连续) 
            cout << "mistake" << endl;
            return 0;
        }		
    }
    	
    if(count == 1) {				// 缺1个 
        cout << tmp << endl;
        return 0;
    } else if(count > 1) {			// 缺多个(间接) 
        cout << "mistake" << endl;
        return 0;
    }
    
    if(arr[0] > 1) {				// 数列左右都有可能缺 
        cout << arr[0]-1 << " " << arr[n-1]+1 << endl;
    } else {						// 数列右边缺 
        cout << arr[n-1]+1 << endl;
    }
    
    return 0;
}
while True: list_get_str = input('请输入一串整数(以空格分隔)').split(' ') list_get = list(map(int, list_get_str)) list_get.sort() print(list_get) list_length = len(list_get) count = 0 count_list = [] mistake = 0 for i in range(list_length-1): if list_get[i] + 1 == list_get[i+1]: continue elif list_get[i] + 2 == list_get[i + 1]: count += 1 count_list.append(list_get[i]) elif (list_get[i] >= list_get[i+1])&nbs***bsp;(list_get[i] + 2) < list_get[i+1]: print('mistake') mistake = 1 break if mistake == 0: if len(count_list) == 0 : print(list_get[0]-1) print(list_get[-1] + 1) elif len(count_list) == 1: print(count_list[0]) elif len(count_list) >= 2: print('mistake')
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int length = in.nextInt();
        int[] numbers = new int[length];
        for (int i = 0; i<length; i++){
            numbers[i]=in.nextInt();
        }
        if(length==1) {
        	if(numbers[0]==1) {
        		System.out.println(2);
        	}
        	else {
        		System.out.print((numbers[0]-1) +" "+ (numbers[0]+1));
        	}
        }
        else {
        	 Arrays.sort(numbers);
             ArrayList<Integer> index = new ArrayList<Integer>();
                 for(int i = 0; i<length-1; i++){
                     if(numbers[i+1]-numbers[i]==0||numbers[i+1]-numbers[i]>2){
                             System.out.println("mistake");
                             return; 
                     }
                     if(numbers[i+1]-numbers[i]==2) {
                     	index.add(i);
                     }
                 }
                 if(index.size()==0) {
                	 if(numbers[0]==1) {
                		 System.out.print((numbers[length-1]+1));
                	 }
                	 else {
                		 System.out.print((numbers[0]-1) +" "+ (numbers[length-1]+1));
                	 }
                 }
                 else if (index.size()==1) {
                 	System.out.println(numbers[index.get(0)]+1);
                 }
                 else {
                 	System.out.println("mistake");
                 }
                          
         }
        }
       
} 那些年躲不过的坑!!!!
                                                                                    #include <iostream>
#include <vector>
using namespace std;
class Solution
{
public:
	void Swap(int& a, int& b)
	{
		a ^= b ^= a ^= b;
	}
	// 选择排序
	void SortVec(vector<int>& vec)
	{				
		int len = vec.size();
		if (len == 1)
		{
			return;
		}
		
		int minPos;
		for (size_t i = 0; i < len; i++)
		{
			minPos = i;
			for (size_t j = i + 1; j < len; j++)
			{
				if (vec[minPos] > vec[j])
				{
					minPos = j;
				}								
			}
			if (minPos != i)
			{
				Swap(vec[minPos], vec[i]);
			}			
		}		
	}
	
	void Func1(vector<int>& vec, int Num)
	{		
		// 1、先排序
		SortVec(vec);
		int gap = vec[Num - 1] - vec[0];
		// 涂抹中间数字
		if ( gap == Num)
		{
			for (size_t i = 0; i < Num; i++)
			{
				int gapTmp = vec[i + 1] - vec[i];
				if (gapTmp == 0)	// 如果有重复数字
				{
					cout << "mistake";
					return;
				}
				
				if (gapTmp != 1)
				{
					cout << vec[i] + 1;
					return;
				}				
			}			
		}
		else if ( gap == (Num - 1) )	// 涂抹两端数字
		{
			if (vec[0] == 1) cout << vec[Num - 1] + 1;	// 如果最小值为1, 涂抹的是最右边(1 <= num[i] <= 1000000000)
			else
			{
				cout << vec[0] - 1 << " " << vec[Num - 1] + 1;				
			}			
		}
		else
		{
			cout << "mistake";
		} 
	}
};
int main()
{
	Solution s;
	vector<int> vec;
	int Num;
	cin>>Num;
	for (size_t i = 0; i < Num; i++)
	{
		int num;
		cin >> num;
		vec.push_back(num);
	}
	s.Func1(vec, Num);
	return 0;
}  int n;
 scanf("%d", &n);
 int* a = new int[n];
 for (int i = 0; i < n; ++i)
  scanf("%d", a + i);
 Qsort(a, 0, n - 1);
 int count = 0;
 int pos;
 for (int i = 0; i < n-1; ++i) {
  if (a[i + 1] - a[i] == 2) {
   pos = i;
   ++count;
  }
  else if (a[i + 1] - a[i] > 2)
   count += a[i + 1] - a[i] - 1;
  if (count > 1)
   break;
 }
 if (count > 1) {
  printf("mistake");
 }
 else if (count == 0) {
  if (a[0] - 1 != 0) {
   printf("%d ", a[0] - 1);
  }
  printf("%d", a[n - 1] + 1);
 }
 else {
  printf("%d", a[pos] + 1);
 }
 delete[]a;
 return 0;
} import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String args[]) { Scanner sc = new Scanner(System.in); int n,k,count=0; n=sc.nextInt(); int[] a=new int[n]; for(int i=0;i<n ;i++) a[i]=sc.nextInt(); Arrays.sort(a); k=a[0];//把排序后数组的第一个数赋值给一个常量 for(int i=1;i<n;i++)//计算有多少个相邻数字差值大于1的情况存在,并把数量计入count { if(a[i]==a[i-1]+1) continue; else count++; } for(int i=0;i<n;i++,k++){//开始遍历数组,开始k的值和啊a[0]相同,每次k++寻找差值大于1的数 if(a[i]!=k&&a[i]==k+1&&count==1)//如果数组和k的值不相等,且整个数组中只有这一种情况存在(即count==1),则这个值为所求值 { System.out.print(k); System.exit(0); } else if(a[i]!=k&&a[i]!=k+1||count>1)//如果数组和k的值不相同,但是k和数组的差值大于1,则这种情况没有可能的数,并且如果count>1,也不存在 { System.out.print("mistake"); System.exit(0); } }//整个数组是一个有序数列,如果所有数之间的差值都为1,则进行如下判断 if(a[0]==1) {//如果这个数组第一个数为1,则只可能是末尾丢失,所求数位数组最后一个数+1 System.out.print(a[n-1]+1); } else System.out.print(a[0]-1+" "+(a[n-1]+1));//如果数组第一个数不是1,根据题意判断有两个值,即头-1尾+1 } }
public class Main {
    public static void main(String[] args) {
        java.util.Scanner sc = new java.util.Scanner(System.in);
        int n = sc.nextInt();
        int[] numbers = new int[n];
        for (int i = 0; i < n; i++) {
            numbers[i] = sc.nextInt();
        }
        guess(numbers);
    }
    private static void guess(int[] numbers) {
        if (numbers.length == 0) {
            mistake();
        } else if (numbers.length == 1) {
            print(numbers[0] - 1, numbers[0] + 1);
        } else {
            int min = numbers[0], max = numbers[0], sum = numbers[0], first = numbers[0];
            boolean[] bitArr = new boolean[numbers.length * 2 + 1];
            bitArr[numbers.length] = true;
            for (int i = 1; i < numbers.length; i++) {
                sum += numbers[i];
                //以first为参照物,将数字对应位数置为true
                int index = numbers[i] - first;
                if ((index > 0 && index <= numbers.length) || (index < 0 && -index <= numbers.length)) {
                    bitArr[numbers.length - index] = true;
                } else if (index != 0) {//数字间距离过大,无法连续
                    mistake();
                    return;
                }
                if (numbers[i] > max) {
                    max = numbers[i];
                }
                if (numbers[i] < min) {
                    min = numbers[i];
                }
            }
            int actualCount = numbers.length;
            //求不重复数字个数
            int uniqueCount = 0;
            for (int i = 0; i < bitArr.length; i++) {
                if (bitArr[i]) {
                    uniqueCount++;
                }
            }
            if (actualCount != uniqueCount) {
                mistake();
                return;
            }
            //期望的数字个数
            int expectedCount = max - min + 1;
            //缺少的数字个数
            int lackCount = expectedCount - uniqueCount;
            if (lackCount == 0) {//数列连续
                print(min - 1, max + 1);
            } else if (lackCount == 1) {//中间缺少一个
                print(0, (max + min) * (numbers.length + 1) / 2 - sum);
            } else {//缺少多个
                mistake();
            }
        }
    }
    private static void mistake() {
        System.out.println("mistake");
    }
    private static void print(int i, int j) {
        if (i > 0) {
            System.out.println(i + " " + j);
        } else {
            System.out.println(j);
        }
    }
}
                                                                                    #include <iostream>
#include <cmath>
#include <string>
#include <algorithm> 
using namespace std;
int main(){
    int n,m,count=0,mis=0;
    cin >> n;
    int num[50]={0};
    int res[50]={0};
    for(int i=0; i<n; i++){
        cin >> num[i];
        //cout <<num[i];
    }
    sort(num,num+n);
    for(int i=0; i<n-1; i++){
        if(num[i]+1 != num[i+1]){
            count++;
        }
    }
    
    if(count>1){
        cout << "mistake";
        return 0;
    }
    
    for(int i=0; i<n; i++){
        if(num[i]+2 == num[i+1]){
            cout << num[i] + 1;
            return 0;
        }else if(num[i]+2<num[i+1]){
            cout << "mistake";
        }
    }
    if(num[0]==1){
        cout << num[n-1]+1;
    }else{
        cout << num[0]-1 <<" "<< num[n-1]+1;
    }
    
    return 0;
    
}
 int main(int argc, const char * argv[]) {
    int n,i,j,temp=0,count=0;
    bool ismistake=false;
    cin>>n;
    int num[n],array[4]={0,0,0,0};
    for(i=0;i<n;i++){
        cin>>num[i];
    }
    for(i=0;i<n;i++){
        for(j=i+1;j<n;j++){
            if(num[j]<num[i]){
                temp = num[i];
                num[i] = num[j];
                num[j] = temp;
            }
        }
    }
    for(i=0;i<n-1;i++){
        if((num[i+1]-num[i])>2){
            cout<<"mistake"<<endl;
            ismistake = true;
            break;
        }
        if(num[i+1]-num[i]==2){
            array[count] = num[i]+1;
            count ++;
        }
    }
    if(ismistake == false){
        if(count == 0){
            if(num[0]>1) cout<<num[0]-1<<" "<<num[n-1]+1;
            else cout<<num[n-1]+1;
        }
        else if(count>=2) cout<<"mistake"<<endl;
        else if(count == 1) cout<<array[0]<<endl;
    }
    return 0;
}
 import string if __name__ == '__main__': input_size = string.atoi(raw_input()) input_str = raw_input() input_int_list = [string.atoi(a) for a in input_str.split()] input_int_list.sort() if input_int_list[-1] - input_int_list[0] + 1 > input_size + 1: print 'mistake' if input_int_list[-1] - input_int_list[0] + 1 == input_size: if 1 != input_int_list[-1]: print str(input_int_list[0] - 1) + ' ' + str(input_int_list[-1] + 1) exit() print str(input_int_list[-1] + 1) for idx in range(len(input_int_list)-1): if input_int_list[idx] + 1 != input_int_list[idx+1]: print str(input_int_list[idx] + 1)
def find_miss(nums):
    _min = float("+inf")
    _max = float("-inf")
    actual_total = 0
    for k in nums:
        flag = _max > _min
        if flag:
            if k > _max:
                _max = k
            elif k < _min:
                _min = k
        else:
            if k > _max:
                _max = k
            if k < _min:
                _min = k
        actual_total = actual_total + k
    predict_total = (_min + _max) * (_max - _min + 1)/2
    miss = predict_total - actual_total
    if miss == 0:
        print _min - 1, 'or', _max + 1
    elif miss > _max:
        print "mistake"
    else:
        print miss
if __name__ == '__main__':
    find_miss([5,6,7,8])
    find_miss([5,6,9,10])
    find_miss([5,6,8,9])