Java 8,109 106 101 90 75 74 71 66字节
a->{int s=0,p=0;for(int i:a){s+=i;p|=1<<i;}return s<7&p==14?24:s;}
-12个字节感谢@OlivierGrégoire。
-31个字节,感谢@Nevay。
说明:
在这里尝试。
a->{ // Method with integer-array parameter and boolean return-type
int s=0, // Sum-integer, starting at 0
p=1; // Product-integer, starting at 1
for(int i:a){ // Loop over the input-array
s+=i; // Add current item to sum
p|=1<<i; // Take 1 bitwise left-shifted with `i`, and bitwise-OR it with `p`
} // End of loop
return p==14 // If `p` is now exactly 14 (`0b1110`)
&s<7? // and the sum is 6 or lower:
24 // Return 24
: // Else:
s; // Return the sum
} // End of method
(低效)证明只[1,2,3]
(以任何顺序)将是可能的结果时,p
是0b1110
(p==14
)和总和低于6或更低(s<7
):在这里尝试。
p==14
(0b1110
)如果输入值以模32为模,则计算结果为true 1
,2
并且3
不包含其他值(p|=1<<i
)(每个值必须出现1次以上)。匹配的输入总和p==14
将大于6
除1,2,3
(s=a*1+b*2+c*3+u*32
带有a>0,b>0,c>0,u>=0
)以外的任何输入的总和。
@内华
旧的71个字节的答案:
a->{int s=0,p=1;for(int i:a){s+=i;p*=i;}return a.length==3&p==s?s*4:s;}
证明对于任何三个给定的非零自然数,仅[1,2,3]
(按任何顺序)其和等于(1+2+3 == 1*2*3
)(为正数):
当和等于 Leo Kurlandchik和Andrzej Nowicki 的乘积时
(效率低下)证明只有[1,2,3]
(以任意顺序)和[0,0,0]
将是可能的结果,且结果为非负数且长度为3:在此处尝试。
因此,s*4
将成为6*4 = 24
对[1,2,3]
,并0*4 = 0
为[0,0,0]
。