已知z=|a-b|+|a-c|+|b-c|,且a<b<c,则z=2(c-a),要让z最大,则要让c最大且a最小且满足三角形三边法则,那么我们可以推出c最大为(n-1)/2,且在b=c-1时有最小值a
当然,如果无法满足记得输出0(绝对不是在水字数)
#include <bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;
while(t--)
{
long long n,s,a=0,b=0,c,t;
cin>>n;
c=(n-1)/2;
t=n-c;
for(long long i=2;i<=t/2;i++)
if(i+c>(t-i)&&t-i+c>i&&i!=t-i&&i!=c&&t-i!=c)
{a=i;b=t-i;break;}
if(a==0)
{
cout<<"0"<<endl;
continue;
}
else
s=abs(a-b)+abs(a-c)+abs(b-c);
cout<<s<<endl;
}
}

京公网安备 11010502036488号