Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 15.10.2023
Сообщений: 63

Числа, которые встречаются лишь единожды; числа, которые встречаются больше одного раза (без дубликатов)

12.11.2023, 22:11. Показов 592. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создайте целочисленный массив с такими элементами:

3, 8, 2, 4, 7, 10, 1, 11, 10, 12, 1, 12, 13, 2, 5, 13, 14, 1, 11, 15, 3, 1, 9, 6, 3, 10, 8, 9, 11, 12

Это случайный массив, со случайной длиной и случайными, но гарантировано ненулевыми значениями его элементов.
Сначала выведите на консоль список всех элементов этого массива, а затем – через запятую:

числа, которые встречаются лишь единожды;
числа, которые встречаются больше одного раза (в списке не должно быть повторов);

Вторую часть задачи почему-то показывает цифру 1 два раза, хотя я исключил дубликаты. Где ошибка?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using System; // условие задачи → https://gitlab.com/web-repository/bakyt/-/issues/84
 
class task_084
{
    static void Main() {
        Console.OutputEncoding = System.Text.Encoding.UTF8;
        Console.WriteLine("Task № 084");
        Console.WriteLine("==============================================================================\n");
        begin:
 
        // исходный массив
        int[] array = { 3, 8, 2, 4, 7, 10, 1, 11, 10, 12, 1, 12, 13, 2, 5, 13, 14, 1, 11, 15, 3, 1, 9, 6, 3, 10, 8, 9, 11, 12 };
        string list = "";
        int count = array.Length;
 
        for (int i = 0, current; i < count; i++) {
            current = array[i];
            for (int j = i + 1; j < count; j++) {
                if (current == array[j]) {
                    list += (list == "" ? "" + current : ", " + current);
                    array[j] = array[count - 1];
                    count--; break;
                }
            }
        }
        Console.WriteLine($"Их них встречаются больше одного раза: {list}");
        Console.WriteLine("\n==============================================================================");
        Console.WriteLine("Повторить выполнение программы? [y/n]:");
        if (Console.ReadLine().Trim().ToLower() == "y") { goto begin; }
    }
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.11.2023, 22:11
Ответы с готовыми решениями:

Числа, которые встречаются более одного раза
Дан список, содержащий целые положительные числа. Вывести в одной строке числа, которые встречаются более одного раза. Ввод 1 2 3 4...

Вывести числа, которые встречаются более одного раза
Не могу понять одну задачку. Условие: Есть массив, заполненный случайными числами. Надо вывести числа, которые встречаются 2 и больше...

Вывести из списка числа, которые встречаются более одного раза
Используя генераторы, решите следующее задание. Напишите программу, которая принимает на вход список символов (любых символов) в одной...

13
 Аватар для Doomov
1056 / 335 / 119
Регистрация: 28.11.2020
Сообщений: 1,066
13.11.2023, 05:21
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    // исходный массив
    int[] array = { 3, 8, 2, 4, 7, 10, 1, 11, 10, 12, 1, 12, 13, 2, 5, 13, 14, 1, 11, 15, 3, 1, 9, 6, 3, 10, 8, 9, 11, 12 };
    Console.WriteLine(String.Join(", ", array));
    
    // Числа, которые встречаются только один раз
    var uniqueNumbers = array.GroupBy (x => x)
                            .Where (g => g.Count() == 1)
                            .Select (g => g.Key);
    Console.WriteLine("Числа, которые встречаются только один раз:");
    Console.WriteLine(String.Join(", ", uniqueNumbers));
    
    // Числа, встречающиеся более одного раза (без дубликатов)
    var repeatedNumbers = array.GroupBy (x => x)
                               .Where (g => g.Count() > 1)
                               .Select (g => g.Key);
    Console.WriteLine("Числа, встречающиеся более одного раза:");
    Console.WriteLine(String.Join(", ", repeatedNumbers));
Добавлено через 10 минут
Вариант без Linq...
Методы...
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/// <summary>
/// Метод для получения чисел, которые встречаются только один раз
/// </summary>
static int[] GetUniqueNumbers (int[] array)
{
    var countMap = new Dictionary<int, int>();
    foreach (var number in array)
    {
        if (countMap.ContainsKey (number))
        {
            countMap [number]++;
        }
        else
        {
            countMap [number] = 1;
        }
    }
 
    var uniqueNumbers = new List<int>();
    foreach (var kvp in countMap)
    {
        if (kvp.Value == 1)
        {
            uniqueNumbers.Add (kvp.Key);
        }
    }
 
    return uniqueNumbers.ToArray();
}
 
/// <summary>
/// Метод для получения чисел, встречающихся более одного раза без повторов
/// </summary>
static int[] GetRepeatedNumbers (int[] array)
{
    var countMap = new Dictionary<int, int>();
    foreach (var number in array)
    {
        if (countMap.ContainsKey (number))
        {
            countMap [number]++;
        }
        else
        {
            countMap [number] = 1;
        }
    }
 
    var repeatedNumbers = new List<int>();
    foreach (var kvp in countMap)
    {
        if (kvp.Value > 1)
        {
            repeatedNumbers.Add (kvp.Key);
        }
    }
 
    return repeatedNumbers.ToArray();
}
 
/// <summary>
/// Метод для вывода массива
/// </summary>
static void PrintNumbers (int[] numbers)
{
    Console.WriteLine(String.Join(", ", numbers));
}
В проге...
C#
1
2
3
4
5
6
7
8
9
10
11
12
    int[] array = { 3, 8, 2, 4, 7, 10, 1, 11, 10, 12, 1, 12, 13, 2, 5, 13, 14, 1, 11, 15, 3, 1, 9, 6, 3, 10, 8, 9, 11, 12 };
    Console.WriteLine (string.Join (", ", array));
 
    // Числа, которые встречаются только один раз
    Console.WriteLine ("Числа, которые встречаются только один раз:");
    var uniqueNumbers = GetUniqueNumbers (array);
    PrintNumbers (uniqueNumbers);
 
    // Числа, встречающиеся более одного раза (без дубликатов)
    Console.WriteLine ("Числа, встречающиеся более одного раза:");
    var repeatedNumbers = GetRepeatedNumbers (array);
    PrintNumbers (repeatedNumbers);
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
13.11.2023, 10:05
Doomov,
Цитата Сообщение от Doomov Посмотреть сообщение
Вариант без Linq...
может лучше 1 метод, в котором в Dict будет пара: число-количество повторов, а в основном методе просто выбирать те или другие?)
0
 Аватар для Doomov
1056 / 335 / 119
Регистрация: 28.11.2020
Сообщений: 1,066
13.11.2023, 10:07
Цитата Сообщение от AndreyVorobey Посмотреть сообщение
может лучше 1 метод, в котором в Dict будет пара
такой вариант пойдет?
C#
1
2
3
4
5
6
7
8
9
10
    int[] array = { 3, 8, 2, 4, 7, 10, 1, 11, 10, 12, 1, 12, 13, 2, 5, 13, 14, 1, 11, 15, 3, 1, 9, 6, 3, 10, 8, 9, 11, 12 };
    Console.WriteLine (String.Join (", ", array));
        
    var arrDic = array.GroupBy (x => x)
                        .Select (g => new { Key = g.Key, Value = g.Count () })
                        .ToDictionary (g => g.Key, g => g.Value);
    Console.WriteLine("Числа, которые встречаются только один раз:\r\n"
        + String.Join (", ", arrDic.Where (d => d.Value == 1).Select (k => k.Key)));
    Console.WriteLine ("Числа, встречающиеся более одного раза:\r\n"
        + String.Join (", ", arrDic.Where (d => d.Value > 1).Select (k => k.Key)));
1
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
13.11.2023, 10:08
Doomov, вполне)))
0
0 / 0 / 0
Регистрация: 15.10.2023
Сообщений: 63
13.11.2023, 11:19  [ТС]
Doomov,
спасибо конечно. Но вы используете классы и методы. А я только условные конструкции, циклы и массивы прошел.
0
 Аватар для Doomov
1056 / 335 / 119
Регистрация: 28.11.2020
Сообщений: 1,066
13.11.2023, 13:12
Проще не знаю как...
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
    // исходный массив
    int[] array = { 3, 8, 2, 4, 7, 10, 1, 11, 10, 12, 1, 12, 13, 2, 5, 13, 14, 1, 11, 15, 3, 1, 9, 6, 3, 10, 8, 9, 11, 12 };
    Console.WriteLine (String.Join (", ", array));
 
    // Числа, которые встречаются только один раз
    var uniqueNumbers = new List<int>();
    // Числа, встречающиеся более одного раза (без дубликатов)
    var repeatedNumbers = new List<int>();
 
    // Итерируем по каждому числу в массиве
    foreach (int number in array)
    {
        // Проверяем, есть ли эти числа уже в списке uniqueNumbers 
        // или repeatedNumbers
        if (uniqueNumbers.Contains (number)) 
        // Уже есть в списке uniqueNumbers, удаляем
        {
            uniqueNumbers.Remove (number);
            repeatedNumbers.Add (number);
        }
        else if (!repeatedNumbers.Contains (number)) 
        // Если числа еще нет в списке repeatedNumbers, 
        // добавляем в uniqueNumbers
        {
            uniqueNumbers.Add (number);
        }
    }
 
    Console.WriteLine ($"Числа, которые встречаются только один раз: \r\n"
                    + String.Join (", ", uniqueNumbers));
 
    Console.WriteLine ($"Числа, которые встречаются больше одного раза: \r\n"
                    + String.Join (", ", repeatedNumbers));
Добавлено через 26 минут
Цитата Сообщение от Kerv Посмотреть сообщение
Но вы используете классы
Классы как таковые не использовал.
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
13.11.2023, 13:15
Kerv, Ваш вариант
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        static void Main(string[] args)
        {
            int[] array = { 3, 8, 2, 4, 7, 10, 1, 11, 10, 12, 1, 12, 13, 2, 5, 13, 14, 1, 11, 15, 3, 1, 9, 6, 3, 10, 8, 9, 11, 12 };
            int index = 0;
            int[] newArray = new int[index];
            for (int i = 0; i < array.Length - 1; i++)
            {                
                for (int j = i + 1; j < array.Length; j++)
                {
                    if (array[i] == array[j] && Array.IndexOf(newArray, array[i]) == -1)
                    {
                        Array.Resize(ref newArray, newArray.Length + 1);
                        newArray[index++] = array[i];                        
                    }
                }
            }
            for(int i = 0; i < newArray.Length; i++)
            {
                Console.WriteLine(newArray[i]);
            }
        }
1
 Аватар для Doomov
1056 / 335 / 119
Регистрация: 28.11.2020
Сообщений: 1,066
13.11.2023, 13:22
Цитата Сообщение от AndreyVorobey Посмотреть сообщение
for(int i = 0; i < newArray.Length; i++)
            {
                Console.WriteLine(newArray[i]);
            }
Надо вывести через запятую. И второй массив, в котором только цифры встречаются один раз
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
13.11.2023, 13:30
Doomov,
Цитата Сообщение от Doomov Посмотреть сообщение
Надо вывести через запятую.
Kerv, заменить второй цикл на
C#
1
Console.WriteLine(String.Join(", ", newArray));
Цитата Сообщение от Doomov Посмотреть сообщение
И второй массив, в котором только цифры встречаются один раз
в начальном варианте только 2я часть показана. так что ее и доработал
->
Цитата Сообщение от Kerv Посмотреть сообщение
Вторую часть задачи почему-то показывает цифру 1 два раза, хотя я исключил дубликаты. Где ошибка?
0
 Аватар для Doomov
1056 / 335 / 119
Регистрация: 28.11.2020
Сообщений: 1,066
13.11.2023, 15:01
Цитата Сообщение от AndreyVorobey Посмотреть сообщение
в начальном варианте только 2я часть показана. так что ее и доработал
->
Пон. Извини

Добавлено через 1 час 14 минут
Добавлю на всякий случай...
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    // Числа, которые встречаются только один раз
    int indexUnique = 0;
    int[] uniquedArray = new int [indexUnique];
    for (int i = 0; i < array.Length - 1; i++)
    {
        bool isUnique = true;
        for (int j = 0; j < array.Length; j++)
        {
            if (i != j && array [i] == array [j])
            {
                isUnique = false;
                break;
            }
        }
        if (isUnique)
        {
            Array.Resize (ref uniquedArray, uniquedArray.Length + 1);
            uniquedArray [indexUnique++] = array [i];
        }
    }
    Console.WriteLine ($"Числа, которые встречаются только один раз: \r\n"
                    + String.Join (", ", uniquedArray));
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
13.11.2023, 15:06
Doomov, так это же почти то же самое, что и у меня, только вместо Array.IndexOf -> bool isUnique
ну ладно)

Добавлено через 2 минуты
а, это про другие числа. сори)
1
2805 / 503 / 120
Регистрация: 26.09.2020
Сообщений: 950
Записей в блоге: 5
13.11.2023, 15:20
Лучший ответ Сообщение было отмечено Kerv как решение

Решение

Kerv, ну вас и мучают…

AndreyVorobey, слегка изменил, а то мало ли ”Array не изучали“
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
static void Main()
{
    // исходный массив
    int[] array = { 3,8,2,4,7,10,1,11,10,12,1,12,13,2,5,13,14,1,11,15,3,1,9,6,3,10,8,9,11,12 };
    int[] newArray = new int[array.Length];
 
    int index = 0;
 
    for (int i = 0; i < array.Length - 1; i++)
    {
        for (int j = i + 1; j < array.Length; j++)
        {
            if (array[i] == array[j] && Array.IndexOf(newArray, array[i]) == -1)
            {
                newArray[index++] = array[i];
            }
        }
    }
 
    int[] notunique = new int[index];
 
    for (int i = 0; i < notunique.Length; i++)
    {
        notunique[i] = newArray[i];
    }
 
    Console.WriteLine(string.Join(", ", notunique));
}
Добавлено через 12 минут
Ещё и
C#
1
Array.IndexOf(newArray, array[i]) == -1)
это хз как заменить без Array не обошлось
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
13.11.2023, 15:22
iNNOKENTIY21,
Цитата Сообщение от iNNOKENTIY21 Посмотреть сообщение
это хз как заменить без Array не обошлось
как в посте 11 от Doomov
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.11.2023, 15:22
Помогаю со студенческими работами здесь

Найти и распечатать числа, которые встречаются в массиве более одного раза
Одномерный массив А состоит из 30 элементов. Найти и распечатать числа, которые встречаются в массиве более одного раза. Помогите сделать

Найти и напечатать числа, которые встречаются в массиве более одного раза
Одномерный массив А состоит из 30 элементов. Найти и напечатать числа, которые встречаются в массиве более одного раза.

Найти и напечатать числа, которые встречаются в массиве более одного раза
Одномерный массив А состоит из 30 элементов. Найти и напечатать числа, которые встречаются в массиве более одного раза.

Сформировать массив A, содержащий числа, которые встречаются в матрице C более одного раза
Внимание! Все задания выполняются исключительно с использованием указателей для индексации и работы с элементами массивов. Размеры массива...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru