1.4.2

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;
}

另请参阅 #

Measurement 库