c#上的友好数字

时间:2016-05-09 21:50:41

标签: c# function

今天是关于堆栈溢出的第一个问题,感谢大家的答案(我的英语很遗憾)。

其实我在程序中工作,它显示友好数字为10000的0。 程序重复数字我不明白为什么不能正常工作。

照片:

284 AND 220 220 AND 284如何删除重复数字?

Amicable Numbers的例子:

220的除数是1,2,4,5,10,11,20,22,44,55和110:其总和是284.除数的总和为284(1,2,4 ,71和142)等于220。

我的代码是:

{{1}}

3 个答案:

答案 0 :(得分:3)

考虑这种情况:numero = 220,然后是suma1 = 284,所以suma2 = 220。然后考虑numero = 284,然后suma1 = 220以及suma2 = 284,完全相反。其他对也是如此。

至于解决方案,您可以做的最简单的检查是仅在suma1 <= suma2时打印。

答案 1 :(得分:0)

在迭代期间它必定会被发现两次。为了消除重复,您可以添加一个列表以防止第二次显示该对:

static void Main(string[] args)
{
    Console.WriteLine("Busca els nombres amics entre 0 i 10000");
    var list = new List<int>();
    int numero, suma1, suma2;

    for (numero = 1; numero < 10000; numero++)
    {
        suma1 = SumaDivisors(numero);
        suma2 = SumaDivisors(suma1);

        if (suma1 != numero && suma2 == numero && !list.Contains(suma1) && !list.Contains(suma2))
        {
            list.Add(suma1);
            list.Add(suma2);

            Console.WriteLine("Els nombre {0} i {1} són nombres amics", suma1, suma2);
        }
    }

    Console.ReadKey();
}

答案 2 :(得分:0)

当这个if语句的左操作数为TRUE [例如(suma1!= numero)]时:

if (suma1 != numero && suma2 == numero)

然后它不会继续评估第二个操作数[例如(suma2 == numero)],以便不捕获条件......它被称为短路评估。