我的算法中的缺陷在哪里找到数组中的所有对,其总和除以k?

时间:2016-08-01 05:15:07

标签: c# algorithm linq

我无法弄清楚我在这里做错了什么。

代码:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
class Solution
{
    static void Main(String[] args) 
    {
        string[] lineParts = Console.ReadLine().Split(' ');
        int k = Convert.ToInt32(lineParts[1]);
        int[] arr = Array.ConvertAll(Console.ReadLine().Split(' '), Int32.Parse);
        var indices = Enumerable.Range(0, arr.Length - 1);
        int pairsDivideK = (from i in indices
                            from j in indices
                            where i < j && ((arr[i] + arr[j]) % k == 0)
                            select 1).ToList().Count / 2;
        Console.WriteLine(pairsDivideK);
    }
}

输入:

6 3
1 3 2 6 1 2

预期产出:

5

我的输出:

1

1 个答案:

答案 0 :(得分:2)

首先,你不必除以2.由于where i < j条件,没有重复。

第二:您必须使用Enumerable.Range(0, arr.Length)(无-1),因为第二个参数不是上限,而是元素的数量。

所以你的代码应该是:

...
var indices = Enumerable.Range(0, arr.Length);
int pairsDivideK = (from i in indices
                    from j in indices
                    where i < j && ((arr[i] + arr[j]) % k == 0)
                    select 1).ToList().Count;
Console.WriteLine(pairsDivideK);