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;}
@OlivierGrégoireのおかげで-12バイト。@Nevayの
おかげで-31バイト。
説明:
ここで試してみてください。
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
(非効率)が()で、合計が6以下()の[1,2,3]
場合にのみ(任意の順序で)可能な結果になるという証明:ここで試してみてください。p
0b1110
p==14
s<7
p==14
(は、0b1110
入力値が32のカバーの値を法ときに限り)真と評価1
、2
及び3
及び他の値(含まないp|=1<<i
)(各値は1+回発生しなければなりません)。一致p==14
する入力の合計は、(with )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;}
ゼロ以外の自然数が与えられた3つの任意の数について、[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]
。