Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从不同的数字组中选择2个数字的方法数的C解决方案_C#_Algorithm_Data Structures_Time Complexity_Number Theory - Fatal编程技术网

C# 从不同的数字组中选择2个数字的方法数的C解决方案

C# 从不同的数字组中选择2个数字的方法数的C解决方案,c#,algorithm,data-structures,time-complexity,number-theory,C#,Algorithm,Data Structures,Time Complexity,Number Theory,我想解决的问题是这样的 给我N,告诉我数字的范围是0,1,…,N-2,N-1 我还得到了配对,告诉我这些数字对在同一组中 例: N=6,0和1是成对的,1和4是成对的,2和3是成对的,我知道剩余的数字在它们自己的组中 然后我知道分组是{0,1,4},{2,3},{5} 从这些组中的不同组中选择两个数字的方法是11,这就是我试图解决的数字。这些选择包括: {0,2}, {0,3}, {0,5}, {1,2}, {1,3}, {1,5}, {4,2}, {4,3}, {4,5}, {2,5}, {3

我想解决的问题是这样的

给我N,告诉我数字的范围是0,1,…,N-2,N-1

我还得到了配对,告诉我这些数字对在同一组中

例:

N=6,0和1是成对的,1和4是成对的,2和3是成对的,我知道剩余的数字在它们自己的组中

然后我知道分组是{0,1,4},{2,3},{5}

从这些组中的不同组中选择两个数字的方法是11,这就是我试图解决的数字。这些选择包括:

{0,2}, {0,3}, {0,5}, {1,2}, {1,3}, {1,5}, {4,2}, {4,3}, {4,5}, {2,5}, {3,5}

有人能帮我找出我的逻辑哪里错了吗?因为我没有通过更大的测试用例,通过了更小的测试用例

我的代码:

例如,我通过了考试

    [TestMethod]
    public void Sample1()
    {
        int N = 5;
        Tuple<int, int>[] pairs = new Tuple<int, int>[]
        {
            Tuple.Create(0, 1),
            Tuple.Create(2, 3),
            Tuple.Create(0, 4)
        };
        Assert.AreEqual(6, PoliticallyCorrectPairs(N, pairs));
    }
但失败

    [TestMethod]
    public void TestCase2()
    {
        int N = 100;
        Tuple<int, int>[] pairs =
@"0 11
2 4
2 95
3 48
4 85
4 95
5 67
5 83
5 42
6 76
9 31
9 22
9 55
10 61
10 38
11 96
11 41
12 60
12 69
14 80
14 99
14 46
15 42
15 75
16 87
16 71
18 99
18 44
19 26
19 59
19 60
20 89
21 69
22 96
22 60
23 88
24 73
27 29
30 32
31 62
32 71
33 43
33 47
35 51
35 75
37 89
37 95
38 83
39 53
41 84
42 76
44 85
45 47
46 65
47 49
47 94
50 55
51 99
53 99
56 78
66 99
71 78
73 98
76 88
78 97
80 90
83 95
85 92
88 99
88 94"
        .Split('\n')
        .Select(line =>
        {
            int[] twofer = line.Split(' ').Select(s => int.Parse(s)).ToArray();
            return Tuple.Create(twofer[0], twofer[1]);
        })
        .ToArray();
        Assert.AreEqual(3984, PoliticallyCorrectPairs(N, pairs));
    }

知道我哪里出错了吗?

问题出在组合部分:

if(gmap[i] != gmap[j])
{
    for(int m = 0; m < n; ++m)
        if(gmap[m] == gmap[j]) // here
            gmap[m] = gmap[i];
}

“假设我知道0和1在同一组中”——为什么?从不同的组中选择两个数字的方法是11为什么?@LeiYang如果你只阅读代码的注释,这是有意义的。他在几个地方把解释搞砸了。@Slepz很好,但OP最好给一个真正的单词使用者story@LeiYang怀疑这是可能的,这看起来像是一个CS任务。
if(gmap[i] != gmap[j])
{
    for(int m = 0; m < n; ++m)
        if(gmap[m] == gmap[j]) // here
            gmap[m] = gmap[i];
}
if(gmap[i] != gmap[j])
{
    int g = gmap[j];
    for(int m = 0; m < n; ++m)
        if(gmap[m] == g)
            gmap[m] = gmap[i];
}