Проблема в вашем коде: вы получаете 3 повторения, потому что когда я равен 1 (смотря на первый 3
), в конце есть еще 3 в списке, а когда мне 5 (смотрит на последний 3
) ) есть еще три в начале списка.
Вместо этого вы должны смотреть только на те цифры, которые идут после вашей текущей позиции - измените на int j = i;
, чтобы вы смотрели только на позиции после текущей позиции, и вы не получите повторных результатов.
for (int i = 0; i < numbers.Length; i++)
{
for (int j = i; j < numbers.Length; j++)
{
if (numbers[i] == numbers[j] && i!=j)
{
Console.WriteLine(numbers[i]);
break;
}
}
}
Сказав это, ваш алгоритм не так эффективен, как использование встроенного алгоритма. Попробуйте GroupBy
var duplicates = numbers.GroupBy(n => n)
.Where(group => group.Count() > 1);
foreach (var group in duplicates)
{
Console.WriteLine("{0} appears {1} times", group.Key, group.Count());
}