Подсчитайте количество уникальных чисел в массиве

помогите пожалуйста с задачей по C#.Подсчитать количество уникальных чисел в массиве, т.е. таких, которые присутствуют в единственном экземпляре. Массив задается пользователем с клавиатуры.
9 ответов

static void Main(string[] args)
{
    int n;
    do
    {
        Console.Write("Введите длину массива: ");
        int.TryParse(Console.ReadLine(), out n);
    } while (n == 0);
 
    int[] arr = new int[n];
    int k;
    for (int i = 0; i < n; i++)
    {
        Console.Write("Введите {0} элемент массива: ", i+1);
        int.TryParse(Console.ReadLine(), out k);
        arr[i] = k;
    }
 
    int count = 0;
    foreach (int item in arr)
    {
        if (Array.IndexOf(arr, item) == Array.LastIndexOf(arr, item))
        {
            Console.WriteLine("Значение: {0}", item);
            count++;
        }
    }
    Console.WriteLine("Всего найдено {0} значений которые встречаются 1 раз", count);
    Console.ReadLine();
}


Saren,
array.Distinct().Count();
вся программа
static class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Введите массив элементов чисел :");
        var count = GetArray(Console.ReadLine).Select(int.Parse).Distinct().Count();
        Console.WriteLine("Количество неповторяющихся элементво : {0}", count);
    }
    public static IEnumerable<string> GetArray(Func<string> get)
    {
        string s;
        while ((s = get()) != "")
            yield return s;
    }
}


rattrapper, обратите внимание, что в задание требовалось найти количество чисел, которые встречаются всего один раз в массиве, а не количество различных значений в массиве.


kodv, а что по Вашему делает Distinct?Вы сначала попробуйте запустить код


Вы сначала попробуйте запустить код
возвращает всегда 1, запутанный очень код), метод принимает на вход строку, причем наворочено ее же как-то возвращает, затем парсит, а поскольку это всего одна строка, то результат всегда - 1. Честно говоря, не сразу вкурил ваш код)


rattrapper, допустим, есть массив {1, 4, 5, 3, 4, 7, 3}. Должны посчитаться числа 1, 5, 7, так как они встречаются в этом массиве один раз. То есть, правильный ответ - 3. Через Distinct посчитаются числа 1, 4, 5, 3, 7. То есть 5 чисел, что является не правильным ответом.


так правильно?
static class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Введите массив элементов чисел :");
        var array = GetNumberArray();
        int count = array.Where(n => array.Count(n.Equals) == 1).Count();
        Console.WriteLine("Количество уникальных элементов : {0}", count);
    }
    public static IEnumerable<int> GetNumberArray()
    {
        string s;
        while ((s = Console.ReadLine()) != "")
            yield return int.Parse(s);
    }
}


rattrapper, Выглядит правильно. Мне то не принципиально, каким способом будет решена данная задача. Это автору темы важно. Я просто увидел, что вы условие не правильно поняли и обратил ваше внимание на это.


static void UnicVarInMass()
        {
            int er;
            int k;
            k = 0;
            int[] arr = new int[10];
            // Заполнение
            for(int i = 0; i < 10; i++)
                arr[i] = Convert.ToInt16(Console.ReadLine());
            // Вывод
            Console.Write("Массив: ");
            for(int i = 0; i < 10; i++)
                    Console.Write(arr[i] + " ");
            Console.WriteLine();
            // уникальных
            for( int i = 0; i < 10; i++)
            {
                er = 0;
                for(int j = 0; j < 10; j++)
                    if ((arr[i] == arr[j]) & (i != j)) er++;
                if (er == 0) k++;
            }
            Console.WriteLine("Уникальных: " + k);
            Console.ReadKey();
        }