Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.70/64: Рейтинг темы: голосов - 64, средняя оценка - 4.70
9 / 9 / 12
Регистрация: 26.09.2016
Сообщений: 180
1

Поиск одинаковых элементов массива

29.10.2016, 19:34. Показов 11859. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот само задание:

Даны натуральное n, целые числа a1, …, an . Внутри данной последовательности могут быть повторяющиеся члены. Получить числа, взятые по одному из каждой группы равных членов.

Написал такую программу:
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Program2
{
    class Program
    {
        static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());
            int[] a = new int[n];
            for (int i = 0; i < n; i++)
            {
                a[i] = int.Parse(Console.ReadLine());           
            }
            for (int i = 0; i < n - 1; i++)
                for (int j = i + 1; j < n; j++)
                    if (a[i] > a[j])
                    {
                        int b = a[i];
                        a[i] = a[j];
                        a[j] = b;
                    }
            for (int i = 1; i < n; i++)
            {
                    if (a[i] == a[i - 1])
                    {
                        Console.Write(" ");
                        Console.WriteLine(a[i]);                   
                }
            }
        }
    }
}
Проблема в том, что она находит одинаковые элементы, если их не больше 2-х. Если больше, то программа не работает. Как исправить, чтоб программа искала одинаковые элементы независимо от их количества? Заранее спасибо
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.10.2016, 19:34
Ответы с готовыми решениями:

Поиск одинаковых элементов массива
List&lt;Good&gt; arr = new List&lt;Good&gt;(); Good a = new Good { price = 10, date = &quot;10.10.2017&quot;...

Поиск одинаковых и различных элементов массива
Обработка массивов: поиск одинаковых и различных элементов массива

Поиск одинаковых элементов массива и запись в другой массив
Здравствуйте, проблема в названии темы. У меня записывается только 1-ый элемент, дальше идут нули...

Поиск одинаковых элементов списка
Дано два списка, элементы которых нужно объеденить в один без повторяющихся элементов. Сделал...

7
7 / 7 / 3
Регистрация: 10.04.2015
Сообщений: 57
29.10.2016, 19:52 2
Дам подсказку, думаю лучше будет отсортировать наш массив в порядке возрастания или убывания, таким образом мы избавимся от лишних циклов, и у нас будут так называемые "группы" элементов, из которых потом будем выводить наш элемент если он встречается подряд больше чем 1 раз.
0
9 / 9 / 12
Регистрация: 26.09.2016
Сообщений: 180
29.10.2016, 20:05  [ТС] 3
Bespredeliwe, У меня же есть сортировка в коде, вот
C#
1
2
3
4
5
6
7
 for (int i = 0; i < n - 1; i++)
                for (int j = i + 1; j < n; j++)
                    if (a[i] > a[j])
                    {
                        int b = a[i];
                        a[i] = a[j];
                        a[j] = b;
0
7 / 7 / 3
Регистрация: 10.04.2015
Сообщений: 57
29.10.2016, 20:11 4
RemX, используй Array.Sort() https://msdn.microsoft.com/ru-... .110).aspx
0
9 / 9 / 12
Регистрация: 26.09.2016
Сообщений: 180
29.10.2016, 20:13  [ТС] 5
Bespredeliwe, Нет, такое использовать у меня нельзя)
0
7 / 7 / 3
Регистрация: 10.04.2015
Сообщений: 57
29.10.2016, 20:44 6
Лучший ответ Сообщение было отмечено RemX как решение

Решение

Накидал, не проверял, могут бить ошибки
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Program2
{
    class Program
    {
        static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());
            int[] a = new int[n];
            for (int i = 0; i < n; i++)
            {
                a[i] = int.Parse(Console.ReadLine());
            }
            for (int i = 0; i < n - 1; i++)
                for (int j = i + 1; j < n; j++)
                    if (a[i] > a[j])
                    {
                        int b = a[i];
                        a[i] = a[j];
                        a[j] = b;
                    }
            Console.WriteLine("**************");
            foreach (int item in a)
            {
                Console.WriteLine(item);
            }
            Console.ReadLine();
            Console.WriteLine("**************");
            int prev = 0;
            for (int i = 0; i < n-1; i++)
            {
                
                if (a[i] == a[i +1] && prev != a[i])
                {
                    prev = a[i];
                    Console.Write(a[i]+" ");
                    
                }
            }
            Console.ReadLine();
        }
    }
}
Добавлено через 8 минут
RemX, Нашел ошибку, замени int prev = 0; на int prev = -1; Все будет работать, если в числах которые вводим не будет числа -1.
1
9 / 9 / 12
Регистрация: 26.09.2016
Сообщений: 180
29.10.2016, 20:51  [ТС] 7
Bespredeliwe, А если будет -2? Просто вроде итак всё работает, если положительные вводить

Добавлено через 2 минуты
Bespredeliwe, Ещё вопрос, а если надо будет выписать числа написанные только один раз, то как надо код изменить?
0
7 / 7 / 3
Регистрация: 10.04.2015
Сообщений: 57
29.10.2016, 20:56 8
RemX, при -2 все будет ок, можешь туда написать вместо -1 prev = 2147483647, тогда все будет тип топ )
0
29.10.2016, 20:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.10.2016, 20:56
Помогаю со студенческими работами здесь

Не работает поиск одинаковых элементов в массиве
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data;...

Поиск одинаковых элементов в двумерном массиве
Есть двумерный массив, нужно в каждой строке найти одинаковые элементы и вывести их и еще...

Работа с массивами. Сортировка, поиск одинаковых элементов
namespace app { class Program { static double number; static void...

Поиск пути для одинаковых элементов в двумерном массиве
в общем у меня есть матрица и там есть элементы равным 1 а все остальные равны нулю, как найти путь...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru