Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 13
1

Повторения чисел

10.04.2013, 16:54. Показов 979. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пож найти кол-во повторений чисел в строке.
Пример: дана строка 12344531
вывод 1-2
2-1
3-2
4-2
5-1
При создании массива используйте пож vector.
Массив заполняется случайными числами.

Помогите, кто сможет.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.04.2013, 16:54
Ответы с готовыми решениями:

Список четырехзначных чисел без повторения цифр
#include <stdio.h> bool func(int,int,int,int); int main() { int mas; int n = 0; ...

Для чисел от 1 до 1000 найти сотни в которых есть внутренние повторения
Для чисел от 1 до 1000, найти сотни в которых есть внутренние повто- рение ( например 122, 133,...

Операторы повторения. Циклические алгоритмы Объявить массив целых чисел из 1000 элементов. Заполнить случайными числами
Операторы повторения. Циклические алгоритмы Объявить массив целых чисел из 1000 элементов....

Повторения
Дана задача: Дан одномерный массив из 150 случайных целых чисел в диапазоне от 14 до 37...

7
395 / 370 / 111
Регистрация: 03.02.2013
Сообщений: 1,130
10.04.2013, 17:08 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
28
#include <cstdlib> 
#include <iostream>
#include <vector>
#include <map>
 
 
int main()
{
    std::vector<unsigned int> M;
    std::map<unsigned int, unsigned int> P;
    
    // заполняем 10 случайных чисел в vector от 0 до 9
    for (std::size_t i=0; i!=10; ++i)
    M.push_back(rand() % 10); 
    
    // считаем повторы
    for (std::vector<unsigned int>::iterator i=M.begin(); i!=M.end(); ++i)
    ++P[*i];
    
    // выводим исходный массив
    for (std::vector<unsigned int>::iterator i=M.begin(); i!=M.end(); ++i)
    std::cout << *i;
    std::cout << std::endl;
    
    // выводим чило - повтор
    for (std::map<unsigned int, unsigned int>::iterator i=P.begin(); i!=P.end(); ++i)
    std::cout << i->first << "-" << i->second << std::endl;
}
1
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 13
10.04.2013, 17:24  [ТС] 3
а полегче сделать сможешь?
з.ы. чтобы при объяснении преподу, у него много вопросов не возникало.
0
164 / 120 / 46
Регистрация: 17.03.2013
Сообщений: 284
10.04.2013, 17:31 4
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
#include <iostream>
#include <vector>
#include <algorithm>
 
int main()
{
    const size_t size = 8;
    int numbers[size] = {1,2,3,4,4,5,3,1};
 
    std::sort(numbers, numbers+size);
 
 
    unsigned int cnt = 0;
 
    for(size_t i = 1; i < size+1; ++i)
    {
        if(numbers[i-1] == numbers[i])
            cnt++;
        else
        {
            std::cout << numbers[i-1] << " - " << cnt+1 << std::endl;
 
            cnt = 0;
        }
    }
 
 
    return 0;
}
если возникнет вопрос:

- почему i-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
#include <iostream>
#include <vector>
#include <algorithm>
 
int main()
{
    const size_t size = 8;
    int numbers[size] = {1,2,3,4,4,5,3,1};
 
    std::sort(numbers, numbers+size);
 
 
    unsigned int cnt = 0;
 
    for(size_t i = 0; i < size; ++i)
    {
        if(numbers[i] == numbers[i+1])
            cnt++;
        else
        {
            std::cout << numbers[i] << " - " << cnt+1 << std::endl;
 
            cnt = 0;
        }
    }
 
 
    return 0;
}
1
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 13
10.04.2013, 18:00  [ТС] 5
спасибо всем)

Добавлено через 19 минут
Цитата Сообщение от abit Посмотреть сообщение
++P[*i]
может объяснить кто-нибудь, как это работает?
0
164 / 120 / 46
Регистрация: 17.03.2013
Сообщений: 284
10.04.2013, 18:08 6
Цитата Сообщение от St93 Посмотреть сообщение
спасибо всем)

Добавлено через 19 минут
может объяснить кто-нибудь, как это работает?

Не по теме:

попробуйте мой вариант, если вы не знаете адресную арифметику зачем тогда вобще его использовать?



по теме: Адресная арифметика
0
395 / 370 / 111
Регистрация: 03.02.2013
Сообщений: 1,130
10.04.2013, 18:15 7
Цитата Сообщение от St93 Посмотреть сообщение
может объяснить кто-нибудь, как это работает?
*i - берётся значение, на которое указывает итератор i (он у меня пробегает вдоль всего vector от начала до конца)

P[*i] - это обращение к ассоциативному массиву map P с ключом *i

упорядоченный ассоциативный массив map устроен таким образом, что если обратится к его элементу с ключом n, то если его нет, то он создастся и для значений типа int - примет значение 0
далее ++ прибавляет к значению по этому ключу единицу

в конце у вас будет упорядоченный ассоциативный массив вида (ключ, количество элементов)
2
164 / 120 / 46
Регистрация: 17.03.2013
Сообщений: 284
10.04.2013, 18:27 8
Цитата Сообщение от abit Посмотреть сообщение
*i - берётся значение, на которое указывает итератор i (он у меня пробегает вдоль всего vector от начала до конца)

P[*i] - это обращение к ассоциативному массиву map P с ключом *i

упорядоченный ассоциативный массив map устроен таким образом, что если обратится к его элементу с ключом n, то если его нет, то он создастся и для значений типа int - примет значение 0
далее ++ прибавляет к значению по этому ключу единицу

в конце у вас будет упорядоченный ассоциативный массив вида (ключ, количество элементов)

Не по теме:

вопрос: зачем столько трудностей? если всё делается одной функцией и одним функтром?

0
10.04.2013, 18:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.04.2013, 18:27
Помогаю со студенческими работами здесь

операция повторения
#include &lt;iostream&gt; using namespace std; int main() { int match, win, ni, por; ...

Структуры повторения while, do / while
Написать программу, которая приглашает ввести три числа: xBegin, yEnd, step. Программа должна...

Оператор повторения
Проверьте задачу #include&lt;stdio.h&gt; #include&lt;conio.h&gt; #include&lt;math.h&gt; #define n 100 void...

Операторы повторения
Запрограммировать расчет точек и вывод на экран значений аргумента и функции f=sin(x)/x в виде...


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

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