今天是关于堆栈溢出的第一个问题,感谢大家的答案(我的英语很遗憾)。
其实我在程序中工作,它显示友好数字为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}}
答案 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)],以便不捕获条件......它被称为短路评估。