С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/79: Рейтинг темы: голосов - 79, средняя оценка - 4.66
 Аватар для OdessaNA
19 / 19 / 6
Регистрация: 10.01.2011
Сообщений: 241

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

02.07.2012, 21:01. Показов 14954. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Придумал задачу, а реализовать до конца не получается.
Суть вот в чём. Массив наполняется случайными числами. Программа выводит на экран повторяющиеся числа и кол-во их повторений.
У меня получилось вывести на экран весь массив и напротив каждого числа кол-во повторений.
А как вывести, к примеру, число 5 - повторяется 3 раза; число 59 - повторяется 9 раз и т.д.. Т.е. исключить дублирование (запустив код - Вы поймёте чего я хочу от программы ).
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
#include <iostream>
#include <time.h>
#include <stdlib.h>
using namespace std;
void main()
{
    const int n=100;
    int Mas[n];
    int k=0;
    int Mas2[n];    
    srand((int)time(NULL)); 
    for(int j=0; j<n; j++)
    {
        Mas[j]=rand()%100;
            for(int i=0; i<n; i++)
        {
            if(Mas[i]==Mas[j])
                k++;
        }       
        Mas2[j]=k;
        k=0;
    }
    for(int i=0; i<n; i++)
    {
        cout<<Mas[i]<<'\t'<<Mas2[i]<<endl;
    }
    system("pause");    
}
В коде указаны те "инструменты" которыми я умею пользоваться.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.07.2012, 21:01
Ответы с готовыми решениями:

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

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

Вывод слов и количество их повторений
Есть код: #include &lt;iostream&gt; #include &lt;cstdio&gt; #include &lt;cstring&gt; using namespace std; const size_t MAX_SIZE = 256; const...

12
 Аватар для Vaiz
104 / 98 / 40
Регистрация: 01.07.2012
Сообщений: 277
02.07.2012, 21:15
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
#include <iostream>
#include <time.h>
#include <stdlib.h>
using namespace std;
void main()
{
    const int n=100;
    int Mas[n];
    int k=0;
    int Mas2[n];    
    srand((int)time(NULL)); 
    for(int j=0; j<n; j++)
    {
        Mas[j]=rand()%100;
        Mas2[j]=0;
    }
    for(int j=0; j<n; j++)
    {
        Mas2[Mas[j]]+=1;
    }
    for(int i=0; i<n; i++)
    {
        if(Mas2[i])
            cout<<i<<'\t'<<Mas2[i]<<endl;
    }
    system("pause");    
}
Кривовато правда, но просто

Добавлено через 2 минуты
и лучше добавить вывод массива
1
 Аватар для OdessaNA
19 / 19 / 6
Регистрация: 10.01.2011
Сообщений: 241
02.07.2012, 21:18  [ТС]
Спасибо!
Всё оказалось очень просто! Наверное надо чуть чаще отвлекаться, а то зациклился на одном, и других путей решения не видно!
На данном этапе моего обучения - "кривоватость не есть порок" .
Ещё раз спасибо!.
0
68 / 68 / 18
Регистрация: 03.06.2012
Сообщений: 176
02.07.2012, 21:22
Цитата Сообщение от OdessaNA Посмотреть сообщение
Всё оказалось очень просто!
Все гениальное просто
0
 Аватар для OdessaNA
19 / 19 / 6
Регистрация: 10.01.2011
Сообщений: 241
03.07.2012, 20:03  [ТС]
Просто на первый взгляд.
Можно Вас попросить объяснить, что происходит в выделенном фрагменте? А то как-то "раз-два и ответ готов". А как это происходит?
C++
1
2
3
4
5
6
7
8
9
10
11
for(int j=0; j<n; j++)
    {
        Mas2[Mas[j]]+=1;
    }
    for(int i=0; i<n; i++)
    {
        if(Mas2[i])
            cout<<i<<'\t'<<Mas2[i]<<'\t'<<endl;
    }
    system("pause");    
}
0
6 / 6 / 2
Регистрация: 29.03.2012
Сообщений: 101
04.07.2012, 03:09
ещё вариант
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
#include <iostream>
#include <time.h>
#include <stdlib.h>
using namespace std;
void main()
{
   const int size = 100;
   int array1[size];
   int k = 0;
   bool label = true;
 
   for (int i = 0; i < size; i++)
   {
       array1[i] = 1 + rand () % 100;
       cout<<array1[i]<<" ";
   }
   cout<<"\n\n\n";
   for (int i = 0; i < size; i++)
   {
       for (int i1 = 0; i1 < size; i1++)
       {
           if (array1[i] == array1[i1] && i1 >= i)
           {
               k++;
           }
           if (array1[i] == array1[i1] && i1 < i)
           {
               label = false;
               break;
           }
       }
       if (label)
       {
           cout<<array1[i]<<"     "<<k - 1<<"\n";
       }
       k = 0;
   }
}
1
 Аватар для Vaiz
104 / 98 / 40
Регистрация: 01.07.2012
Сообщений: 277
04.07.2012, 07:21
Цитата Сообщение от OdessaNA Посмотреть сообщение
Просто на первый взгляд.
Можно Вас попросить объяснить, что происходит в выделенном фрагменте? А то как-то "раз-два и ответ готов". А как это происходит?
C++
1
2
3
4
5
6
7
8
9
10
11
for(int j=0; j<n; j++)
    {
        Mas2[Mas[j]]+=1;
    }
    for(int i=0; i<n; i++)
    {
        if(Mas2[i])
            cout<<i<<'\t'<<Mas2[i]<<'\t'<<endl;
    }
    system("pause");    
}
Mas2[Mas[j]]+=1; - Mas2 это счетчик элементов, каждое его значение показывает сколько таких чисел есть. Т.е. Mas2[10] показывает сколько 10 в массиве. а операция Mas2[i]+=1 это тоже самое, что Mas2[i]=Mas2[i]+1

А потом просто выводим получившийся массив. if(Mas2[i]) отсеивает числа с кол-вом повторов 0, можно заменить кодом if(Mas2[i]==0)
2
 Аватар для OdessaNA
19 / 19 / 6
Регистрация: 10.01.2011
Сообщений: 241
04.07.2012, 20:01  [ТС]
Vaiz, и HelloWorld56, спасибо Вам за помощь.
0
 Аватар для OdessaNA
19 / 19 / 6
Регистрация: 10.01.2011
Сообщений: 241
05.07.2012, 21:12  [ТС]
К стати, HelloWorld56, Ваш код не корректно работает.
0
 Аватар для OdessaNA
19 / 19 / 6
Регистрация: 10.01.2011
Сообщений: 241
26.07.2012, 19:15  [ТС]
Спустя три недели
А вот мой личный вариант!
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
#include <iostream>
#include <time.h>
#include <stdlib.h>
using namespace std;
void main()
{
    const int n=100;
    int Mas[n];
    int k=0, sch=0, sch2=0, tmp;
    srand((int)time(NULL));
    for(int j=0; j<n; ++j)     
    {
        Mas[j]=rand()%50;
        cout<<Mas[j]<<' ';        //выводим массив на экран (для удобства)
    }
    cout<<"\n\n";
    for(int j=0; j<n; ++j)       //сортировка "пузырьком"
    {
        for(int i=0; i<n; ++i)
        {
            if(Mas[i]>Mas[i+1])
            {
                tmp=Mas[i];
                Mas[i]=Mas[i+1];
                Mas[i+1]=tmp;
            }
        }
    }
    for(int j=0; j<n; ++j)     
    {
        cout<<Mas[j]<<' ';        //выводим массив на экран (для удобства)
    }
    cout<<"\n\n";
    for(int j=0; j<n; ++j)     
    {
        for(int i=j; i<n; ++i)
        {
            if(Mas[j]==Mas[i])    //пробегаем по массиву вперёд, если значение j-той ячейки массива встречается - срабатывают счетчики
            {
                k++;              //этот счетчик считает сколько раз данная цифра встречается 
                sch++;            //этот счетчик - если >0 - смотри условие для следующего cout
            }           
        }
        for(int k=j-1; k>=0; --k)    //эта пробежка от j-той ячейки массива к нулевой с целью определить - если данное значение массива встречалось ранее - 
        {                                                                                                           // -не выводить информацию на экран
            if(Mas[k]==Mas[j])
            {
                sch2++;
            }
        }
        if(sch>0&&sch2==0&&k>1)
            {
                cout<<Mas[j]<<" recurse "<<k<<" times.\n"; //вывод информации о том, сколько раз цифра повторяется в массиве.
            }
            k=0;
            sch=0;
            sch2=0;
    }
    cout<<"\n";
    system("pause");    
}
Друзья, подскажите пожалуйста, почему программа выдаёт ошибку и как её избежать?
0
 Аватар для Vaiz
104 / 98 / 40
Регистрация: 01.07.2012
Сообщений: 277
26.07.2012, 19:50
При сортировке пузырьком у вас происходит выход за пределы массива
C++
1
2
3
4
5
6
7
8
9
10
11
12
   for(int j=0; j<n; ++j)       //сортировка "пузырьком"
    {
        for(int i=0; i<n; ++i)
        {
            if(Mas[i]>Mas[i+1])
            {
                tmp=Mas[i];
                Mas[i]=Mas[i+1];
                Mas[i+1]=tmp;
            }
        }
    }
for(int i=0; i<n; ++i) - здесь и должно быть до n-1, иначе в этой строчке происходит выход за пределы массива if(Mas[i]>Mas[i+1])
1
 Аватар для OdessaNA
19 / 19 / 6
Регистрация: 10.01.2011
Сообщений: 241
26.07.2012, 20:22  [ТС]
! точно !
Спасибо, Vaiz!
0
0 / 0 / 0
Регистрация: 26.03.2018
Сообщений: 1
26.03.2018, 10:42
Добрый день.

Извиняюсь за археологию, но а что значит строка в коде HelloWorld56:

if (label)

что это значит?

пробовал заменить на if (label==true) или if(label==false) - код некорректно отрабатывает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.03.2018, 10:42
Помогаю со студенческими работами здесь

вывод повторяющихся чисел
задача такова: вводится числа, программа выдает самое наиболее часто встречающиеся число: var Nom, Sum : array of Integer; N,...

Количество не повторяющихся чисел
Здравствуйте. Есть программа которая выводит не повторяющиеся числа. Например если вводимые числа 1 1 2 3 4, то выводит 2 3 4. Как...

Вывод в ячейках столбца количество повторяющихся записей
Здравствуйте. Есть две таблицы в MS Access 2010 (назовем их &quot;Главная&quot; и &quot;Вспомогательная&quot;). В Главной есть поле &quot;ID&quot;,...

Подсчитать количество повторяющихся чисел
задача такова: нужно в одно поле memo вывести одномерный массив рандомных чисел (штук 100) в промежутке от 0 до 10 с интервалом 0,5. то...

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru