Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.81/21: Рейтинг темы: голосов - 21, средняя оценка - 4.81
0 / 0 / 0
Регистрация: 04.07.2019
Сообщений: 22
1

Вывести количество подряд идущих элементов

17.08.2019, 13:58. Показов 3906. Ответов 10

Дан массив из 15 элементов. Вывести количество подряд идущих одинаковых элементов, например 5, 5, 2, 2, 4, 10, 10, 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
int main()
{
setlocale(LC_ALL, "rus");
 
int arr[15] = {1,5,3,3,6,2,2,4,4,4,16,-5,12,7,7};
int k=1;
int number;
 
for (int i=0;i<15;i++)
{
    cout <<arr[i]<<" ";
}
 
for (int i=0;i<15;i++)
{
        if (arr[i] == arr[i+1])
    {
        number = arr[i];
        k++;
        cout << endl;
        break;
    }
}
    cout <<number<< " повторяется " <<k<< " раз(a)"<< endl;
 
for (int i=0;i<15;i++)
{
        k=1;
        if (arr[i] != number && arr[i] == arr[i+1] )
    {
        number = arr[i];
        k++;
        cout << endl;
        break;
    }
}
 
    cout <<number<< " повторяется " <<k<< " раз(a)"<< endl;
 
 return 0;
}
Выводит только первую пару, после break естественно программа прерывается, а как сделать, чтобы выводилось количество всех остальных парных элементов? Пытался сделать с циклом while, поставив к нему условие (arr[i] == arr[i+1]) и далее всё, что в вышеприведенном цикле for, но ничего не выходит.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.08.2019, 13:58
Ответы с готовыми решениями:

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

Количество подряд идущих отрицательных элементов
Задание простое, просто хочу по-нормальному его растолковать. Дается целочисленный массив из 30...

Количество положительных элементов, идущих подряд
Определить наибольшее число положительных элементов, идущих подряд, в массиве А.

Найти наименьшее количество одинаковых, идущих подряд элементов
Дан вектор размерности N. Найти наименьшее количество одинаковых, идущих подряд элементов.

10
359 / 226 / 120
Регистрация: 25.06.2019
Сообщений: 830
17.08.2019, 14:25 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
for (int k=0, i=0;i<14;i++)
{
  if (arr[i] == arr[i+1])
  {
   k+=!k?2:1;
   number=arr[i];
  }
 if(k && (arr[i] != arr[i+1] || i==13))
 {
    cout <<number<< " повторяется " <<k<< " раз(a)"<< endl;number = arr[i];
    k=0;
 }
}
1
0 / 0 / 0
Регистрация: 04.07.2019
Сообщений: 22
17.08.2019, 14:31  [ТС] 3
Спасибо, а можно комментарий к 5 строке??
Цитата Сообщение от Pvt Посмотреть сообщение
k+=!k?2:1;
0
359 / 226 / 120
Регистрация: 25.06.2019
Сообщений: 830
17.08.2019, 14:33 4
C++
1
2
if(k==0) k=2;
else k++;
1
567 / 406 / 132
Регистрация: 22.11.2017
Сообщений: 1,053
18.08.2019, 12:47 5
M_K_, привет!
Держи код.
Кликните здесь для просмотра всего текста

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
#include <iostream>
 
//Для вывода массива на консоль через std::cout << ... << arr << ...;
template<size_t N>
std::ostream& operator<< (std::ostream& os, int(&arr)[N])
{
    for (auto value : arr)
        os << value << " ";
    return os;
}
 
int main()
{
    setlocale(LC_ALL, "Rus");
 
    int arr[] = { 1, 5, 3, 3, 6, 2, 2, 4, 4, 4, 16, -5, 12, 7, 7 };
    size_t count_in_arr = sizeof(arr) / sizeof(arr[0u]); //Размер массива
    std::cout << "Исходное содержание массива\n" << arr << "\n";
 
    int old = arr[0u];
    size_t count = 0u;
    for (auto it = arr + 1u; it != arr + count_in_arr; old = *it++)
    {
        if (old == *it)
            ++count;
        else
        {
            std::cout << old << " повторяется " << ++count << " раз(a)\n";
            count = 0u;
        }
    }
    std::cout << old << " повторяется " << ++count << " раз(a)\n";
 
    return 0;
}
0
Миниатюры
Вывести количество подряд идущих элементов  
359 / 226 / 120
Регистрация: 25.06.2019
Сообщений: 830
18.08.2019, 13:15 6
если массив не завершается повтором?
0
567 / 406 / 132
Регистрация: 22.11.2017
Сообщений: 1,053
18.08.2019, 13:34 7
Pvt, у меня?
Норм будет. Запусти - посмотри.
0
6464 / 4397 / 2518
Регистрация: 18.12.2017
Сообщений: 13,744
18.08.2019, 14:13 8
Цитата Сообщение от M_K_ Посмотреть сообщение
Вывести количество подряд идущих одинаковых элементов
Цитата Сообщение от SomniPhobia Посмотреть сообщение
1 5 3 3 6 2 2 4 4 4 16 -5 12 7 7
1 повторяется 1 раз(а)
1 в этом массиве не повторяется, т.е. слово 'повторяется' использовать не стоит. подряд идущие ИМХО это элементы количество которых больше одного и они идут подряд. т.е. для примера
Цитата Сообщение от M_K_ Посмотреть сообщение
5, 5, 2, 2, 4, 10, 10, 10
количество подряд идущих одинаковых 2+2+3=7
1
567 / 406 / 132
Регистрация: 22.11.2017
Сообщений: 1,053
18.08.2019, 14:37 9
Yetty, а группы цифр могут повторяться?
5 5 4 9 5 5 5 7

Добавлено через 2 минуты
Цитата Сообщение от Yetty Посмотреть сообщение
количество подряд идущих одинаковых 2+2+3=7
Если цифры не повторяютя.
Кликните здесь для просмотра всего текста

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
#include <iostream>
#include <unordered_map>
 
//Для вывода массива на консоль через std::cout << ... << arr << ...;
template<size_t N>
std::ostream& operator<< (std::ostream& os, int(&arr)[N])
{
    for (auto value : arr)
        os << value << " ";
    return os;
}
 
int main()
{
    setlocale(LC_ALL, "Rus");
 
    int arr[] = { 5, 5, 2, 2, 4, 10, 10, 10 };
    size_t count_in_arr = sizeof(arr) / sizeof(arr[0u]); //Размер массива
    std::cout << "Исходное содержание массива\n" << arr << "\n";
 
    std::unordered_map<int, size_t> value_count;
    for (auto value : arr)
        ++value_count[value];
    size_t count_repeat = 0u;
    for (const auto& p : value_count)
        if (p.second > 1u)
            count_repeat += p.second;
    std::cout << count_repeat << "\n";
 
    return 0;
}


Добавлено через 4 минуты
Yetty, если цифры могут повторяться вне группы.
Кликните здесь для просмотра всего текста

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
#include <iostream>
#include <unordered_map>
 
//Для вывода массива на консоль через std::cout << ... << arr << ...;
template<size_t N>
std::ostream& operator<< (std::ostream& os, int(&arr)[N])
{
    for (auto value : arr)
        os << value << " ";
    return os;
}
 
int main()
{
    setlocale(LC_ALL, "Rus");
 
    int arr[] = { 5, 5, 2, 2, 4, 10, 10, 10, 5, 5, 5 };
    size_t count_in_arr = sizeof(arr) / sizeof(arr[0u]); //Размер массива
    std::cout << "Исходное содержание массива\n" << arr << "\n";
 
    int old = arr[0u];
    size_t acc = 0u;
    size_t count_repeat = 0u;
    for (auto it = arr + 1u; it != arr + count_in_arr; old = *it++)
    {
        if (old == *it)
            ++acc;
        else
        {
            if (++acc > 1u)
                count_repeat += acc;
            acc = 0u;
        }
    }
    if (++acc > 1u)
        count_repeat += acc;
    std::cout << count_repeat << "\n";
 
    return 0;
}
0
812 / 500 / 210
Регистрация: 19.01.2019
Сообщений: 1,196
18.08.2019, 15:12 10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <algorithm>
 
int main()
{
    int arr[15] = { 1,5,3,3,6,2,2,4,4,4,16,-5,12,7,7 };
    size_t cnt = 0;
    int* it = std::adjacent_find(std::begin(arr), std::end(arr));
    while (it != std::end(arr)) {
        int* next = std::adjacent_find(it + 1, std::end(arr));
        cnt += (next == it + 1) ? 1 : 2;
        it = next;
    }
    std::cout << cnt;
    return 0;
}
1
6464 / 4397 / 2518
Регистрация: 18.12.2017
Сообщений: 13,744
18.08.2019, 15:38 11
вариант без подключения доп. библиотек:
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
#include <iostream>
using namespace std;
 
int main()
{
    int count=0;
    const int n=15;
    double a[n];
 
    cout << "Enter " << n << " elements:\n";    
    for (int i = 0; i < n; i++)      
    cin >> a[i];   
    
    bool b=false;    
    for(int i = 0; i < n-1; i++) 
    {
    if (a[i]==a[i+1]) {b=true;count++;}
    if ((a[i]!=a[i+1] && b) || (a[i]==a[i+1] && i==n-2)) {b=false;count++;}    
    }
   
    cout << "count=" << count << "\n";
   
system("pause");
return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.08.2019, 15:38

Подсчитать максимальное количество подряд идущих отрицательных элементов.
Дан одномерный массив А, состоящий из N элементов. Подсчитать максимальное количество подряд идущих...

Найти максимальное количество подряд идущих чётных элементов
Мне дана задача : опишите на одном из языков программирования алгоритм подсчета максимального...

Найти максимальное количество подряд идущих минимальных элементов
Найти максимальное количество подряд идущих минимальных элементов. ОДНОПРОХОДНОЙ алгоритм

Как найти максимальное количество подряд идущих элементов?
Всем привет! У нас есть массив который задается пользователем(цифры 0 или 6) int depo; Как...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.