【问题标题】:Amicable numbers on c#c# 上的友好数字
【发布时间】:2016-05-09 21:50:40
【问题描述】:

今天是我关于堆栈溢出的第一个问题,谢谢大家的回答(对不起,我的英语不好)。

实际上,我在程序中使用它向我显示友好的数字 10000 中的 0。 程序重复数字我不明白为什么不工作。

图片:

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

友好数字示例:

220的除数是1、2、4、5、10、11、20、22、44、55和110:它们的和是284。而284的除数之和(1、2、4 , 71 和 142) 等于 220。

我的代码是:

class Program
{
    static int SumaDivisors(int nombre)
    {
        int suma;
        suma = 0;

        for (int contador = 1; contador < nombre; contador++)
        {
            if (nombre % contador == 0)
            {
                suma = suma + contador;
            }
        }
        return suma;
    }

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

        for (numero = 1; numero < 10000; numero++)
        {

            suma1 = SumaDivisors(numero);
            suma2 = SumaDivisors(suma1);

            if (suma1 != numero && suma2 == numero)
            {
                Console.WriteLine("Els nombre {0} i {1} són nombres amics", suma1, suma2);
            }
        }
            Console.ReadKey();
    }
}

【问题讨论】:

标签: c# function


【解决方案1】:

考虑这种情况:numero = 220,然后是suma1 = 284,然后是suma2 = 220。然后考虑numero = 284,然后是suma1 = 220,然后是suma2 = 284,正好相反。其他对也是如此。

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

【讨论】:

  • 感谢您的回答,它非常简单的解决方案并且可以正常工作。
  • 您需要将配对存储在一个列表中,然后从列表中删除重复项(或者不要添加已经存在的数字)。 int[,] 数据 = { { 284, 220 }, { 220, 284 }, { 1210, 1184 }, { 1184, 1210 }, { 2924, 2620 }, { 2620, 2924 }, { 5564, 5020 }, { 5020, 5564 }, { 6368, 6232 }, { 6232, 6368 } };
  • @MarcCM,如果它对你有用,请务必接受这个答案
【解决方案2】:

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

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

【讨论】:

  • 感谢您的回答,不错的选择,但我不明白这个解决方案。我是 C# 世界的新手
【解决方案3】:

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

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

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

【讨论】:

  • 感谢您的建议,我是这个世界的新手,感谢您的演讲。
猜你喜欢
  • 1970-01-01
  • 2020-06-03
  • 1970-01-01
  • 2017-04-29
  • 1970-01-01
  • 1970-01-01
  • 2010-12-25
  • 2011-01-25
  • 1970-01-01
相关资源
最近更新 更多