Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
31 / 15 / 7
Регистрация: 08.01.2019
Сообщений: 636

Найти количество одинаковых элементов массива

30.10.2019, 21:58. Показов 1358. Ответов 18

Студворк — интернет-сервис помощи студентам
Здравствуйте, мне попалась задачка с таким условием:
Дан список из чисел. Нужно вывести сколько раз повторялись числа

Примеры входных и выходных данных:
1 1 2 2 2 3 3, ответ - 3
1 2 3 3 4 4 5 5 6 7, ответ - 7
-100 -99 -98 -97 -96, ответ - 5

Вот мой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main(int argc, char ** argv){
    int size;
    int count;
    cin >> size;
    int mas[size];
    for(int i=0; i<size; i++){
        cin >> mas[i];
    }
    sort(mas, mas + size);
    for(int i=0; i<size; i++){
        if(mas[i] == mas[i+1]){
            count++;
        }
    }
    cout << endl << count;
Он работает верно...ну только для первого примера...А в целом вообще не работает. Вот к примеру, если взять размер массива 5 и ввести такие числа 1 1 1 1 5, то ответ должен быть 2, а мой код выдает 3 0_о
Помогите, я чет не прослеживаю логику по которой это должно выполнятся
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.10.2019, 21:58
Ответы с готовыми решениями:

Найти количество одинаковых элементов массива
Уважаемые кодеры, прошу вашей помощи. Есть одномерный массив, который уже задан, например int a={1,2,3,2,6,2,7} Нужно посчитать...

Найти количество одинаковых элементов массива
Помогите в решение я работаю на борланде Си Задание: Найти количество одинаковых элементов массива А(N) (N=21, элементы от -4 до 4) ...

Найти количество одинаковых элементов массива
Найти количество одинаковых элементов массива и дописать это количество в этот же массив, помогите пж. Мой код, там таблица в которой...

18
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,984
Записей в блоге: 32
30.10.2019, 22:43
C++
1
2
3
4
5
int main() {
    std::set<int> s;
    int x; while (std::cin >> x) s.insert(x);
    std::cout << s.size();
}
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
30.10.2019, 22:49
Vlast001, чет мне кажется, ты неправильно задание сформулировал. Может быть - "Сколько разных элементов" ?
А ты "if (mas[i] == mas[i+1])" считаешь сколько раз соседи одинковые. Да и то неправильно. mas[i+1] при i=size-1 выводи за пределы массива
0
31 / 15 / 7
Регистрация: 08.01.2019
Сообщений: 636
30.10.2019, 22:50  [ТС]
_Ivana, Объясните подажлуйста то, что вы написали, детально, особенно ту часть где стоит <set>, почему
C++
1
while (std::cin >> x)
бесконечный ввод...
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,984
Записей в блоге: 32
30.10.2019, 22:54
Vlast001, переведи 1тыр, объясню
0
31 / 15 / 7
Регистрация: 08.01.2019
Сообщений: 636
30.10.2019, 22:56  [ТС]
Цитата Сообщение от _Ivana Посмотреть сообщение
переведи 1тыр
Что?
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
30.10.2019, 22:57
Цитата Сообщение от Vlast001 Посмотреть сообщение
Помогите, я чет не прослеживаю логику
так в Ваших примерах и нет логики
Цитата Сообщение от Vlast001 Посмотреть сообщение
Нужно вывести сколько раз повторялись числа
Примеры входных и выходных данных:
1 1 2 2 2 3 3, ответ - 3
1 2 3 3 4 4 5 5 6 7, ответ - 7
-100 -99 -98 -97 -96, ответ - 5
правильные ответы:
1 1 2 2 2 3 3, ответ: число 1 - 1 раз повторяется, число 2 - 2 раза, число 3 - 1 раз
1 2 3 3 4 4 5 5 6 7, ответ: число 3 - 1 раз повторяется, число 4 - 1 раз, число 5 - 1 раз
-100 -99 -98 -97 -96, ответ: нет повторов
0
31 / 15 / 7
Регистрация: 08.01.2019
Сообщений: 636
30.10.2019, 23:01  [ТС]
Цитата Сообщение от Байт Посмотреть сообщение
Может быть - "Сколько разных элементов" ?
Я так и передам преподу))

Добавлено через 4 минуты
Цитата Сообщение от Yetty Посмотреть сообщение
правильные ответы:
1 1 2 2 2 3 3, ответ: число 1 - 1 повтор, число 2 - 2 повтора, число 3 - 1 повтор
1 2 3 3 4 4 5 5 6 7, ответ: число 3 - 1 повтор, число 4 - 1 повтор, число 5 - 1 повтор
-100 -99 -98 -97 -96, ответ: нет повторов
Потому и не могу решить это задание, так как должны быть правильно не это, а это
Цитата Сообщение от Vlast001 Посмотреть сообщение
Примеры входных и выходных данных:
1 1 2 2 2 3 3, ответ - 3
1 2 3 3 4 4 5 5 6 7, ответ - 7
-100 -99 -98 -97 -96, ответ - 5
Я уже понял по примерам как это работает, но хз как реализовать
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
30.10.2019, 23:06
Цитата Сообщение от Vlast001 Посмотреть сообщение
Я уже понял по примерам как это работает
так расскажите. пока результат не соответствует приведённому Вами условию задачи.
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,984
Записей в блоге: 32
30.10.2019, 23:10
Может ответ - это последнее число массива, если все числа положительны, и 5 если нет?
0
31 / 15 / 7
Регистрация: 08.01.2019
Сообщений: 636
30.10.2019, 23:32  [ТС]
Yetty, _Ivana,
Допустим такой список чисел: 1 2 3 4 4 4 6, ответ должен быть не 1 как вы считаете, а 5
1. начался цикл, смотрим первый элемент - это 1 сравнили его со следующим элементом, они не ровны, пошли дальше не нашли в списке больше единиц - увеличили счетчик на 1.
2. так мы повторяли до 4 и у нас в счетчике уже число 3, теперь пошли по числу 4, смотрим что следующий(4 индекс) тоже 4, идем дальше, и снова видим что это число 4, сравниваем уже с последним числом( индекс в массиве 6) и он оказался не равен предыдущему числу (пятому индексу) - увеличили счетчик на 1
3. смотрим число 6 - это оказался последний индекс в массиве, значит сравнивать больше не с чем - увеличили счетчик на 1. (если бы последний элемент массива такой же как и предыдущий и т.д. то мы сравнением как во втором пункте только мы найдем ни отличающийся число, а конец массива - тоже увеличили счетчик на 1)
Вот по такому алгоритму мы нашли, что наш ответ 5, и по такому как я понял и получились ответы в примерах входных/выходных данных
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
30.10.2019, 23:33
_Ivana, в задаче требуется вывести количество различных чисел.
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,984
Записей в блоге: 32
30.10.2019, 23:35
Yetty, ага, и даже кот приведен прямо во 2 посте
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
30.10.2019, 23:48
Цитата Сообщение от _Ivana Посмотреть сообщение
ага, и даже кот приведен прямо во 2 посте
видел я Ваш код - забросить всё в set и Ok - а уточнил, потому что Вы спросили - или это юмор такой возможно однако учитывая что данные подаются отсортированными, от ТС похоже ждут другого способа решения.
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
30.10.2019, 23:50
Vlast001, Если то, что вы рассказали в посте 11, правда, то ваш код в посте 1 почти верен. Чуток подправим строчки 10-14
C++
1
2
3
4
5
    for(int i=0; i<size-1; i++){
        if(mas[i] != mas[i+1]){
            count++;
        }
    }
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,984
Записей в блоге: 32
30.10.2019, 23:53
OK, можно и другой
C++
1
2
3
4
int main() {
    int x=0, y, n=0; while (std::cin >> y) { n+=!(x==y); x=y; }
    std::cout << n;
}
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
31.10.2019, 00:02
Vlast001, Вы можете нормально сформулировать задачу ? какие числа подаются - отсортированные или произвольные, что является признаком окончания ввода ?
0
31 / 15 / 7
Регистрация: 08.01.2019
Сообщений: 636
31.10.2019, 00:54  [ТС]
Байт,
Цитата Сообщение от Байт Посмотреть сообщение
for(int i=0; i<size-1; i++){
* * * * if(mas[i] != mas[i+1]){
* * * * * * count++;
* * * * }
* * }
Хах, вы можете объяснить почему вы уже второй раз пытаетесь мне пропихнуть size-1, что это значит в контексте этой программы. Просто ответы на 1 меньше становятся, а вот если i<size то, все верно. Большое вам спасибо.
P.S.
C++
1
2
3
 if(mas[i] != mas[i+1]){
* * * * * * count++;
* * * * }
я так делал, но у меня было это не верно потому, что код был такой
C++
1
2
3
4
5
6
7
8
for(int i=0; i<size; i++){
        if(mas[i] == mas[i+1]){
            count++;
        }
        else if(mas[i] != mas[i+1]){
* * * * * * count++;
* * * * }
    }
и это получалось, что я не специально считал количество элементов в массиве

Yetty,
Цитата Сообщение от Yetty Посмотреть сообщение
Вы можете нормально сформулировать задачу ?
Я повторил слово в слово задание из билета))
Цитата Сообщение от Yetty Посмотреть сообщение
какие числа подаются - отсортированные или произвольные,
Я заметил, что в примерах все три раза список чисел подается отсортированный, потому, я решил на всякий случай после ввода элементов их сортировать, посмотрите внимательно код из поста 1.

Цитата Сообщение от Yetty Посмотреть сообщение
что является признаком окончания ввода ?
Поскольку вы затронули эту тему... То что я задаю размер массива это не верно, к сожалению. Нужно вводить как в примере. Можно немножко по наглеть и попросить реализовать ввод тремя способами, которые пришли на ум? (для общего развития будет очень полезно на это взглянуть)
1. Ввод через аргументы командной строки: a.exe 1 1 2 2 2 3
2. Чтение из файла ( желательно через аналог freopen() в с++)
3. Вводить числа после запуска приложения и остановить ввод допустим по нажатию клавиши q или все элементы вводить через пробел, а окончание ввода клавиша enter
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
31.10.2019, 08:36
Цитата Сообщение от Vlast001 Посмотреть сообщение
пытаетесь мне пропихнуть size-1,
Объясняю по буквам на примере бабочек.
Массив 1 1 2 2 2 3 3. size = 7
mas[0] = 1 mas[1] = 1 mas[2] = 2 mas[3] = 2 mas [4] = 2 mas[5] = 3 mas[6] = 3. ВСЕ. Никакого mas[7] нет, не существует в природе. Мусор там случайный.
for(i=0; i<size; i++) === for(i=0; i<7; i++)
На последнем проходе цикла i = 6.
В выражении mas[i]!=mas[i+1] (===) mas[6] != mas[7] вы обращаетесь к несуществующему элементу
Цитата Сообщение от Vlast001 Посмотреть сообщение
Просто ответы на 1 меньше становятся,
Да, верно. Просто начинать надо с count = 1; Ведь один-то элемент всегда есть. Посмотрите, что происходит с последовательностью "1 1 1" или "1 1 2 2"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.10.2019, 08:36
Помогаю со студенческими работами здесь

Найти количество одинаковых элементов массива
Мне нужно чтобы программа считала правильно одинаковые элементы массива #include &lt;iostream&gt; #include&lt;ctime&gt; using...

Найти количество одинаковых элементов двухэлементного массива А={а[і]}
найти количество одинаковых элементов двухэлементного массива А={а}

Найти максимальное количество одинаковых элементов массива
Задание: Максимальное количество одинаковых элементов Дан массив размера N. Найдите максимальное количество одинаковых элементов этого...

Найти количество пар одинаковых рядом стоящих элементов массива
Найти количество пар одинаковых рядом стоящих элементов массива

количество одинаковых элементов массива
Помогите пожалуйста написать программу, которая бы считывала 4 числа из файла, считала количество одинаковых элементов массива и записывала...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru