Найти повторяющиеся последовательные числа в случайно сгенерированном массиве - PullRequest
0 голосов
/ 29 мая 2018

Я хочу найти повторяющиеся числа в строке (2 в строке, 3 в строке, ...) в случайно сгенерированном массиве.Я не могу сделать это дальше, чем это:

#include "stdafx.h"
#include <iostream>
#include <cstring>
#include <ctime>
#include <array>
#include <algorithm>
using namespace std;

int main()
{
    srand(time(NULL));

    const int velikostPolja = 100;
    int a[velikostPolja];
    int y = 0;
    int x = 0;

    for (int i = 0; i < velikostPolja; i++)
    {
        a[i] = rand() % 10;
        cout << a[i];   
    }

    cout << endl;

    for (int i = 0; i < velikostPolja; i++)
    {       
        if (a[i] == a[i + 1])
            x++;
    }

    cout << endl;
    cout << "Two times repated in row: " << x << endl;

    system("pause");
    return 0;
}

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Вы можете сделать это следующим образом:

int count[velikostPolja] = { 0 };
int c = 0;
for (int i = 1; i < velikostPolja; i++)
{       
    if (a[i] == a[i - 1])
    {
        ++c;
    }
    else
    {
        ++count[c];
        c = 0;
    }
}

for (int i = 1; i < velikostPolja; i++)
{
    if (count[i])
    {
        cout << i + 1 << " times repeated in row: " << count[i] << endl;
    }
}

Однако это не учитывает повторов в конце a.Я оставляю это как упражнение для себя.

0 голосов
/ 30 мая 2018

Вы можете использовать:

template <typename IT>
std::size_t count_repetition(IT begin, IT end, std::size_t count)
{
    std::size_t res = 0;
    auto it = begin;
    while (it != end) {
        it = std::adjacent_find(it, end);
        if (it == end){
            return res;   
        }
        const auto it2 = std::find_if(it, end, [it](const auto& e) { return e != *it; });
        const auto dist = std::distance(it, it2);
        if (count <= dist) {
            // how to count 2-repetition for {a, a, a, a}
#if 0            
            ++res; // Count only as 1
#else
            res += dist + 1 - count; // count as 3
#endif
        }
        it = it2;
    }
    return res;
}

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...