连续整数--全国模拟(一)

[编程题] 连续整数
时间限制:1秒
空间限制:32768K
牛牛的好朋友羊羊在纸上写了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
 
解题思路:因为加上去掉的数是一个连续序列,所以想到记录min、max,以及n个数的和sum,求从min到max连续序列和sum2 val = sum2- sum,如果val在min、max区间内,则输出val,否则输出min-1 和max+1 其中如果min-1 <=0 就只输出max+1 ,然后否则输出mistake
 1 #include <iostream>
 2 #include <limits.h>//INT_MIN INT_MAX
 3  
 4 using namespace std;
 5  
 6 int main()
 7 {
 8     int n;
 9     while(cin>>n)
10     {
11         int a[n];
12         for(int i=0;i<n;i++)
13         {
14             cin>>a[i];
15         }
16         int min = INT_MAX;
17         int max = INT_MIN;
18         int sum = 0;
19         for(int i=0;i<n;i++)
20         {
21             sum += a[i];
22             if(a[i] > max)
23             {
24                 max = a[i];
25             }
26             if(a[i] < min)
27             {
28                 min = a[i];
29             }
30         }
31         int sum2 = ((min+max)*(max-min+1))/2;
32         int val = sum2 - sum;
33         if(val > min && val < max)
34         {
35             cout<<val<<endl;
36         }
37         else if(val == 0)
38         {
39             if(min-1 >0)
40                 cout<<min-1<<" "<<max+1<<endl;
41             else
42                 cout<<max+1<<endl;
43         }
44         else
45         {
46             cout<<"mistake"<<endl;
47         }
48     }
49     return 0;
50 }
原文地址:https://www.cnblogs.com/qqky/p/7064858.html