读书人

求大神帮忙看一上这题如何做?

发布时间: 2013-03-22 09:49:50 作者: rapoo

求大神帮忙看一下这题怎么做???
有N个数字是来自一个长度为N+1的连续整数序列,但是给你的并不是有序的,请你帮忙找出来是缺失的那个数字是在序列的两边还是中间



Input

有多组测试数据,每组测试数据包括2行,第一行包括一个整数N(0<N<10000),第二行包括N个整数
以N为0结束


Output

每组测试数据输出结果:
中间缺失输出M,两边缺失输出S



Sample Input



Original

Transformed


5
2 3 7 5 6
5
3 4 2 5 6
0



Sample Output



Original

Transformed


Case 1:
M
Case 2:
S



[解决办法]
按我的理解,本来这个题应该是考排序的,但是实际上只要求:连续整数列则输出S,非连续输出M。

如果是连续的递增 数列 应该满足 递增数列的求和公式,
如果是非连续的递增数列 则不满足。
方法:
在第一轮读取输入数据时可以计算出数列和,并找到数列里的最小值和最大值。
根据最大值和最小值,假设是连续数列做出求和公式的和比较第一轮输入时计算的和。如果一致,则判断连续,否则非连续。

供参考
[解决办法]
2 3 7 5 6
遍历一遍 最小2 最大7 实际总和23 理论总和(2+7)*(7-2+1)/2 = 27
理论总和与实际总和 之差 = 4
最小值2 ~ 最大7 之间有数据缺失
则4就是缺失的那个数
介于最大值与最小值之间

3 4 2 5 6
遍历一遍 最小2 最大6 实际总和20 理论总和(2+6)*(6-2+1)/2 = 20
理论总和与实际总和 之差 = 0
最小值2 ~ 最大6 之间 无缺失数据
则缺失的那个数在两端 要么是1 要么是7

读书人网 >C语言

热点推荐