Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.83
OdessaNA
 Аватар для OdessaNA
19 / 19 / 0
Регистрация: 10.01.2011
Сообщений: 240
02.07.2012, 21:01     Вывод повторяющихся чисел массива и количество повторений #1
Добрый день. Придумал задачу, а реализовать до конца не получается.
Суть вот в чём. Массив наполняется случайными числами. Программа выводит на экран повторяющиеся числа и кол-во их повторений.
У меня получилось вывести на экран весь массив и напротив каждого числа кол-во повторений.
А как вывести, к примеру, число 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");    
}
В коде указаны те "инструменты" которыми я умею пользоваться.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.07.2012, 21:01     Вывод повторяющихся чисел массива и количество повторений
Посмотрите здесь:

C++ В матрице целых чисел поменять нулевую строку со строкой, содержащей наибольшее количество повторяющихся элементов.
C++ Количество не повторяющихся чисел
Сгенерировать массив размером 20 на 20 из чисел от 0 до 15. Сосчитать количество повторений каждого символа. C++
C++ Перебор массива и поиск повторяющихся чисел
C++ как вычислить количество простых чисел среди положительных чисел массива
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vaiz
 Аватар для Vaiz
98 / 92 / 29
Регистрация: 01.07.2012
Сообщений: 270
Завершенные тесты: 1
02.07.2012, 21:15     Вывод повторяющихся чисел массива и количество повторений #2
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 минуты
и лучше добавить вывод массива
OdessaNA
 Аватар для OdessaNA
19 / 19 / 0
Регистрация: 10.01.2011
Сообщений: 240
02.07.2012, 21:18  [ТС]     Вывод повторяющихся чисел массива и количество повторений #3
Спасибо!
Всё оказалось очень просто! Наверное надо чуть чаще отвлекаться, а то зациклился на одном, и других путей решения не видно!
На данном этапе моего обучения - "кривоватость не есть порок" .
Ещё раз спасибо!.
g-h
67 / 67 / 1
Регистрация: 03.06.2012
Сообщений: 176
02.07.2012, 21:22     Вывод повторяющихся чисел массива и количество повторений #4
Цитата Сообщение от OdessaNA Посмотреть сообщение
Всё оказалось очень просто!
Все гениальное просто
OdessaNA
 Аватар для OdessaNA
19 / 19 / 0
Регистрация: 10.01.2011
Сообщений: 240
03.07.2012, 20:03  [ТС]     Вывод повторяющихся чисел массива и количество повторений #5
Просто на первый взгляд.
Можно Вас попросить объяснить, что происходит в выделенном фрагменте? А то как-то "раз-два и ответ готов". А как это происходит?
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");    
}
HelloWorld56
5 / 5 / 1
Регистрация: 29.03.2012
Сообщений: 62
04.07.2012, 03:09     Вывод повторяющихся чисел массива и количество повторений #6
ещё вариант
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;
   }
}
Vaiz
 Аватар для Vaiz
98 / 92 / 29
Регистрация: 01.07.2012
Сообщений: 270
Завершенные тесты: 1
04.07.2012, 07:21     Вывод повторяющихся чисел массива и количество повторений #7
Цитата Сообщение от 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)
OdessaNA
 Аватар для OdessaNA
19 / 19 / 0
Регистрация: 10.01.2011
Сообщений: 240
04.07.2012, 20:01  [ТС]     Вывод повторяющихся чисел массива и количество повторений #8
Vaiz, и HelloWorld56, спасибо Вам за помощь.
OdessaNA
 Аватар для OdessaNA
19 / 19 / 0
Регистрация: 10.01.2011
Сообщений: 240
05.07.2012, 21:12  [ТС]     Вывод повторяющихся чисел массива и количество повторений #9
К стати, HelloWorld56, Ваш код не корректно работает.
OdessaNA
 Аватар для OdessaNA
19 / 19 / 0
Регистрация: 10.01.2011
Сообщений: 240
26.07.2012, 19:15  [ТС]     Вывод повторяющихся чисел массива и количество повторений #10
Спустя три недели
А вот мой личный вариант!
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");    
}
Друзья, подскажите пожалуйста, почему программа выдаёт ошибку и как её избежать?
Vaiz
 Аватар для Vaiz
98 / 92 / 29
Регистрация: 01.07.2012
Сообщений: 270
Завершенные тесты: 1
26.07.2012, 19:50     Вывод повторяющихся чисел массива и количество повторений #11
При сортировке пузырьком у вас происходит выход за пределы массива
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])
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.07.2012, 20:22     Вывод повторяющихся чисел массива и количество повторений
Еще ссылки по теме:

C++ Вывод не повторяющихся в массиве В, элементов массива А
Подсчет повторяющихся чисел одномерного массива C++
C++ Найти произведение всех положительных чисел массива, и количество отрицательных чисел

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

Или воспользуйтесь поиском по форуму:
OdessaNA
 Аватар для OdessaNA
19 / 19 / 0
Регистрация: 10.01.2011
Сообщений: 240
26.07.2012, 20:22  [ТС]     Вывод повторяющихся чисел массива и количество повторений #12
! точно !
Спасибо, Vaiz!
Yandex
Объявления
26.07.2012, 20:22     Вывод повторяющихся чисел массива и количество повторений
Ответ Создать тему
Опции темы

Текущее время: 07:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru