Заблокирован
1

Реализовать функцию, возвращающую набор элементов, которые встречаются в массиве более одного раза

28.05.2017, 10:49. Показов 721. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Функция принимает на вход массив целочисленных значений. Должна вернуть набор элементов, которые встречаются в массиве более одного раза (должны быть отсортированы). Какая временная сложность?
Что я сделала:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
сhar array[10];
array.insert('A');
array.insert('C');
array.insert('A');
array.insert('C');
array.insert('K');
array.insert('C');
array.insert('K');
array.insert('E');
array.insert('Q');
array.insert('P');
int FindDuplicates(char array)
{
for(int  index = 0; index  != 9; ++index)
{
    int  temp = 0;
    if (index  == array)
     ++temp;
}
};
А дальше я не знаю как делать. Я не программист. Мне нужно на зачет это сделать.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.05.2017, 10:49
Ответы с готовыми решениями:

Одномерный массив А суммируется из 30 элементов. Найти и напечатать числа, которые встречаются в массиве более одного раза
Помогите. Одномерный массив А суммируется из 30 элементов. Найти и напечатать числа, которые...

Найти и напечатать числа, которые встречаются в массиве более одного раза
Одномерный массив А состоит из 30 элементов. Найти и напечатать числа, которые встречаются в...

Многомерные массивы. Найти и напечатать числа, которые встречаются в массиве более одного раза
Одномерный массив А состоит из 30 элементов. Найти и напечатать числа, которые встречаются в...

Подсчитать, сколько элементов встречаются в массиве более одного раза.
Помогите пожалуйста кто может. Очень прошу. :cry: Сдать в четверг нужно... Подсчитать, сколько...

12
671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
28.05.2017, 11:03 2
A
C
K
Для закрытия данного окна нажмите <ВВОД>...
^A^C

Warning: Program '/usr/bin/qtcreator_process_stub' crashed.
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
#include <iostream>
#include <vector>
#include <string>
#include <iterator>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cctype>
#include <tuple>
#include <climits>
#include <cstdlib>
 
template<size_t size>
char* FindDuplicates(char _array[size])
{
    char *duplicates = new char[size]{0};
    size_t index = 0;
 
    for (size_t i = 0; i < size; ++i)
    {
        if (std::count(_array, size+_array, _array[i]) > 1)
            if (!std::count(duplicates, size+duplicates, _array[i]))
            duplicates[index++] = _array[i];
    }
 
 
    return duplicates;
};
 
int main(int argc, char *argv[])
{
 
    char _array[10] = {'A', 'C', 'A', 'C', 'K', 'C', 'K', 'E', 'Q', 'P'};
 
    char *duplicates =FindDuplicates<10>(_array);
 
    for (int i = 0; i < 10 && duplicates[i]; ++i)
        std::cout << duplicates[i] << std::endl;
 
    // [ANTIWARNING] unused parameters: 'argc', 'argv'
    return 0; (void)argc;(void)argv;
}
1
Заблокирован
28.05.2017, 11:10  [ТС] 3
dailydose, но мне нужно знать сколько раз
например A - 3
B- 2
0
Эксперт С++
1624 / 954 / 782
Регистрация: 06.02.2016
Сообщений: 2,452
Записей в блоге: 31
28.05.2017, 12:11 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
#include <iostream>
#include <algorithm>
#include <unordered_map>
using namespace std;
template<size_t N>
unordered_map<char,int> f(char (&a)[N]) {
    unordered_map<char,int>m;
    for(int i=0; i!=N; i++) {
        ++m[a[i]];
    }
 
    return m;
}
int main() {
    char a[]= {'A','C','A','C','K','C','K','E','Q','P'};
    auto ma=f(a);
    for(const auto&x:ma) {
        if(x.second>1) {
            cout<<x.first<<" "<<x.second<<endl;
        }
    }
    return 0;
}
2
Заблокирован
28.05.2017, 12:41  [ТС] 5
Peoples,
спасибо, но у Вас много не понятного для меня. Посмотрите что у меня в коде не правильно
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
#include "stdafx.h"
#include <iostream>
#include <vector>
 
template<size_t size>
int* FindDuplicates(int array[size])
{
    std::vector<size_t> duplicates(size);
    size_t index = 0;
 
    for (size_t i = 0; i < size; ++i)
    {
        int temp = std::count(array, size + array, array[i]);
        int temp1 = std::count(duplicates, size + duplicates, array[i]);
        if (temp > 1)
            if (!temp1)
                duplicates[index++] = array[i];
    }
    return duplicates;
};
 
int main(int argc, int *argv[])
{
    int array[10] = { 1, 4, 5, 7, 1, 8, 9, 9, 3};
    int* duplicates = FindDuplicates<10>(array);
 
    for (int i = 0; i < 10 && duplicates[i]; ++i)
        std::cout << duplicates[i] << std::endl;
    return 0; 
}
у меня с вектором много ошибок+ нужно еще щетчик сделать а я не вдупляю где именно его ставить.
кричит на эту строчку

C++
1
int temp1 = std::count(duplicates, size + duplicates, array[i]);
и на эту

C++
1
return duplicates;
0
1718 / 567 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
28.05.2017, 13:19 6
Количество одинаковых элементов в одномерном массиве (строке матрицы)
Может пригодится
0
671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
28.05.2017, 13:33 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
32
#include <iostream>
#include <utility>
#include <algorithm>
 
using pair = std::pair<int, size_t>;
using pairs = std::vector< pair >;
 
pairs FindDuplicates(int *array, size_t size)
{
    pairs duplicates;
 
    for (size_t i = 0; i < size; ++i)
    {
        int temp = std::count(array, size + array, array[i]);
        int temp1 = [&](const int t){ for(const auto& dupl : duplicates) if(dupl.first == t) return true ;return false; }(array[i]);
        if (temp > 1)
            if (!temp1)
                duplicates.push_back(std::make_pair (array[i], temp));
    }
    return duplicates;
}
 
int main(/*int argc, int *argv[]*/)
{
    constexpr size_t N = 10;
    int array[N] = { 1, 4, 5, 7, 1, 8, 9, 9, 3};
    pairs duplicates = FindDuplicates(array, N);
 
    for (size_t i = 0; i < duplicates.size(); ++i)
        std::cout << duplicates[i].first << " - " << duplicates[i].second << std::endl;
    return 0;
}
1 - 2
9 - 2
Для закрытия данного окна нажмите <ВВОД>...
^A^C

Warning: Program '/usr/bin/qtcreator_process_stub' crashed.

Добавлено через 1 минуту
Цитата Сообщение от dailydose Посмотреть сообщение
char _array[10] = {'A', 'C', 'A', 'C', 'K', 'C', 'K', 'E', 'Q', 'P'};
A - 2
C - 3
K - 2
Для закрытия данного окна нажмите <ВВОД>...
^A^C

Warning: Program '/usr/bin/qtcreator_process_stub' crashed.

Добавлено через 7 минут

Не по теме:

Цитата Сообщение от мановар Посмотреть сообщение
Количество одинаковых элементов в одномерном массиве (строке матрицы)
Может пригодится
дык оно не выводит количество повторов для каждого символа
count_same = 9
sh: 1: pause: not found
Для закрытия данного окна нажмите <ВВОД>...
^A^C

Warning: Program '/usr/bin/qtcreator_process_stub' crashed.

0
1718 / 567 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
28.05.2017, 13:37 8
Цитата Сообщение от dailydose Посмотреть сообщение
дык оно не выводит количество повторов для каждого символа
Дык переделать два раза плюнуть. Одну строчку переписать.
0
671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
28.05.2017, 13:41 9

Не по теме:

Цитата Сообщение от мановар Посмотреть сообщение
Одну строчку переписать.
подскажите какую? мне интересно прост:)



Добавлено через 29 секунд

Не по теме:

Цитата Сообщение от мановар Посмотреть сообщение
два раза плюнуть
и в кого плюнуть?:D

0
1718 / 567 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
28.05.2017, 13:50 10
13 переписываем, 16 убираем соответственно.

Не по теме:


Цитата Сообщение от dailydose Посмотреть сообщение
и в кого плюнуть?
Зачем сразу в кого то? Просто так, через плечо три раза, чтоб прогу не сглазить. :D

1
671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
28.05.2017, 14:36 11
Цитата Сообщение от мановар Посмотреть сообщение
13 переписываем, 16 убираем соответственно.
это слишком лехко, ТС"у возможно нужно именно хранить эти данные, а не просто 1 раз вывести
0
1718 / 567 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
28.05.2017, 15:14 12
Цитата Сообщение от dailydose Посмотреть сообщение
это слишком лехко
Умный в гору не пойдет, умный гору обойдет.
Настоящие герои всегда идут в обход. и т.д.
Цитата Сообщение от dailydose Посмотреть сообщение
возможно нужно именно хранить эти данные
Создайте еще один вектор и запишите в него, а если нужно использовать на следующий день или через неделю, то запишите в файл.
0
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
28.05.2017, 15:47 13
oksanavol, здравствуйте! Вот несложный для понимания код. Надеюсь, был вам полезен.

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
#include <iostream>
#include <algorithm>
#include <windows.h> //Шрифт консоли - Lucida Console
 
using namespace std;
 
void MoreThanOne(int* X, int size) //Функция вывода элементов, встречающихся более одного раза
{
    int k, t;
    k = t = 0;
    for (int i = t; i < size; i++)
    {
        if (X[i] == X[i+1])
        {
            k++;
        }
        else
        {
            t = k;
            k = 0;
            if (t > 0)
            {
                cout << X[i] << " ";
            }
        }
    }
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int N, k, t;
    cout << "Введите размерность массива:" << endl;
    cout << "N = ";
    cin >> N;
    int* A = new int[N];
    cout << "Введите элементы массива:" << endl;
    for (int i = 0; i < N; i++)
    {
        cin >> A[i];
    }
    sort(A, A + N); //Сортируем массив
    cout << "Искомые элементы:" << endl;
    MoreThanOne(A, N); //Выводим искомые элементы
    cout << endl;
    delete [] A;
    system("pause");
    return 0;
}
0
28.05.2017, 15:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.05.2017, 15:47
Помогаю со студенческими работами здесь

Распечатайте только те значения элементов массива, которые встречаются в нём более одного раза
Распечатайте только те значения элементов массива, которые встречаются в нём более одного раза, при...

Напечатать все слова, которые встречаются в последовательности более одного раза
Дана последовательность, состоящая от 1 до 30 слов в каждом из которых от 1 до 5 малых латинских...

Исключить из файла все слова, которые встречаются более одного раза
Найти в файле f все слова которые встречаются более одного раза исключить их с файла f и получить...

Определите слова, которые встречаются в строке более одного раза, и количество их повторений
Приветствую, форумчане! Задание: дана строка слов, разделенных пробелами. Определите слова,...


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

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

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