Rabbits
Here N (N ≥ 3) rabbits are playing by the river. They are playing on a number line, each occupying a different integer. In a single move, one of the outer rabbits jumps into a space between any other two. At no point may two rabbits occupy the same position.
Help them play as long as possible
Input
The input has several test cases. The first line of input contains an integer t (1 ≤ t ≤ 500) indicating the number of test cases.
For each case the first line contains the integer N (3 ≤ N ≤ 500) described as above. The second line contains n integers a1a1 < a2a2 < a3a3 < ... < aNaN which are the initial positions of the rabbits. For each rabbit, its initial position
aiai satisfies 1 ≤ aiai ≤ 10000.
Output
For each case, output the largest number of moves the rabbits can make.
Sample Input
5 3 3 4 6 3 2 3 5 3 3 5 9 4 1 2 3 4 4 1 2 4 5
Sample Output
1 1 3 0 1
这道题说最外边的兔子可以移动,最左边和最右边都可以算最外边,因此遍历两个兔子中间有空格的,最边上的兔子就可以跳到中间,然后和第二边上的兔子翻滚跳跃,可以把每个空格都跳一遍,但是最边上的兔子和第二个边上的兔子中间有空格的时候空格不算,需要特判。
ac代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
int main()
{
int t;
cin >> t;
int a[maxn];
while(t --){
int n;
cin >> n;
for(int i = 0;i < n;i ++){
cin >> a[i];
}
long long sum=0;
if(a[1]-a[0]==1||a[n-1]-a[n-2]==1){
for(int i=1;i<n;i++){
if(a[i]-a[i-1]!=1){
sum+=a[i]-a[i-1];
sum--;
}
}
}
else{
if(a[1]-a[0]>a[n-1]-a[n-2]){
for(int i=1;i<n-1;i++){
if(a[i]-a[i-1]!=1){
sum+=a[i]-a[i-1];
sum--;
}
}
}
else{
for(int i=2;i<n;i++){
if(a[i]-a[i-1]!=1){
sum+=a[i]-a[i-1];
sum--;
}
}
}
}
cout<<sum<<endl;
}
return 0;
}