你本身的思路是正确的,就是最后那个
if(a-2==b-1==c&&a+b+c==a*3||a+b+c==b*3||a+b+c==c*3) 不知所云,难道不应该是
if( c+1==b && b+1==a ) 吗?也就是

程序代码:
bool foo( int a, int b, int c )
{
if( a > c )
std::swap( a, c );
if( b > c )
std::swap( b, c );
if( a > b )
std::swap( a, b );
return a+1==b && b+1==c;
}
用数学思路来思考,有三个自由量,那么取三个等式就可以确定下来,例如
bool foo( int a, int b, int c )
{
int p = a+b+c;
int q = a*b*c;
int r = a*a+b*b+c*c;
return p*p*p==27*q+9*p && p*p+6==3*r;
}
当然,因为 a+b+c、a*b*c、a*a+b*b+c*c 都可能溢出,所以只能算是数学算法,不能变为计算机算法。