1.4.2 #
解答 #
将 a[i] + a[j] + a[k]
改为 (long)a[i] + a[j] + a[k]
即可。
此时整个式子将按照精度最高(也就是 long)的标准计算。
long.MaxValue = 9223372036854775807 > int.MaxValue * 3 = 6442450941
代码 #
/// <summary>
/// 计算和为零的三元组的数量。
/// </summary>
/// <param name="a">输入数组。</param>
/// <returns>和为零的三元组的数量。</returns>
public static int Count(int[] a)
{
var n = a.Length;
var count = 0;
for (var i = 0; i < n; i++)
{
for (var j = i + 1; j < n; j++)
{
for (var k = j + 1; k < n; k++)
{
if ((long)a[i] + a[j] + a[k] == 0)
{
count++;
}
}
}
}
return count;
}