Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
TechRoi
0 / 0 / 0
Регистрация: 01.11.2016
Сообщений: 31
1

Найти совпадающие фрагменты данных в двух массивах

05.03.2017, 14:49. Просмотров 880. Ответов 6

Задание:
Дано натуральные числа N, K (N>K) и два одномерных массива A1, A2, …, AN и B1, B2, …, BK
целых чисел. В массиве A выбрать такие K элементов, которые подряд идут, Ai+1, Ai+2…,Ai+k, чтобы Ai+1=B1, Ai+2=B2, …, Ai+k=Bk...
Заготовка есть:
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
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <locale.h>
int main()
{
    int N,K,i;
    int *p,*q;
    setlocale(LC_ALL, "rus");
    printf("Введите N\n");
    scanf("%d",&N);
    p=(int*)malloc(N*sizeof(int));
    q=(int*)malloc(K*sizeof(int));
    for (i=0;i<N;i++)
        {
            printf("Введите элемент %d\n",i+1);
            scanf("%d", &p[i]);
        }
    for (i=0;i<N;i++)
            {
                printf("%d  ",p[i]);
            }
    printf("\nВведите K\n");
    scanf("%d",&K);
    for (i=0;i<K;i++)
    {
        printf("Введите элемент %d\n",i+1);
            scanf("%d", &q[i]);
    }
    for (i=0;i<K;i++)
            {
                printf("%d  ",q[i]);
            }
    free(p);
    return 0;
}
Помогите дальше разобраться, что хотят в условии
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.03.2017, 14:49
Ответы с готовыми решениями:

Найти одинаковые элементы в двух массивах
Помогите написать программу в Visual C++: разработать функцию, которая находит...

Найти в двух массивах одинаковые элементы
Проверить в массивах А и B одинаковые элементы

Найти максимальные элементы в двух массивах и обменять их местами
дано два масиви дійсних чисел . визначити максимальні елементи у кожному масиві...

Найти в двух одномерных массивах максимальные элементы и просуммировать их
Составить программы с алгоритмами нахождения экстремумов, сортировка элементов,...

Массив: Найти произведение двух верхнеугольных матриц, которые храняться в упакованном виде в одномерных массивах.
Найти произведение двух верхнеугольных матриц,которые храняться в упакованном...

6
Lambont
92 / 91 / 61
Регистрация: 23.11.2013
Сообщений: 242
05.03.2017, 15:23 2
У вас в начале выполнения программы переменная K никак не инициализируется и используется в качестве множителя для получения размера выделенной памяти, это может вызвать ошибку...

Цитата Сообщение от TechRoi Посмотреть сообщение
Помогите дальше разобраться, что хотят в условии
Хотят чтобы программа находила в массиве A вхождение массива B (ну то есть найти в массиве А все элементы подряд массива В)
1
TechRoi
0 / 0 / 0
Регистрация: 01.11.2016
Сообщений: 31
05.03.2017, 15:31  [ТС] 3
Подскажите, как это реализовать
0
Lambont
92 / 91 / 61
Регистрация: 23.11.2013
Сообщений: 242
05.03.2017, 17:25 4
Лучший ответ Сообщение было отмечено TechRoi как решение

Решение

Цитата Сообщение от TechRoi Посмотреть сообщение
Подскажите, как это реализовать
Ну, например:
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
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main()
{
    int N, K, i, j;
    int *A, *B;
    setlocale(LC_ALL, "rus");
    printf("Введите N: ");
    scanf("%d", &N);
    A = (int*)malloc(N * sizeof(int));
    for (i = 0;i<N;i++)
    {
        printf("Введите элемент %d: ", i + 1);
        scanf("%d", &A[i]);
    }
    for (i = 0; i < N; i++)
        printf("A[%d]=%d  ", i, A[i]);
    printf("\n\nВведите K: ");
    scanf("%d", &K);
    B = (int*)malloc(K * sizeof(int));
    for (i = 0;i<K;i++)
    {
        printf("Введите элемент %d: ", i + 1);
        scanf("%d", &B[i]);
    }
    for (i = 0;i<K;i++)
        printf("B[%d]=%d  ", i, B[i]);
    puts("\n");
    for (i = 0; i < N; i++)
    {
        if (A[i] == B[0])
        {
            for (j = 0; j < K; j++)
            {
                if (A[i + j] != B[j])
                    break;
            }
            if (j == K)
                break;
        }
    }
    if (i == N)
        printf("Нет вхождения последовательности.");
    else
    {
        for (int n = i; n < i + j; n++)
            printf("A[%d]=%d  ", n, A[n]);
    }
    free(A);
    free(B);
    puts("");
    return 0;
}
1
New man
232 / 153 / 63
Регистрация: 23.05.2011
Сообщений: 799
Завершенные тесты: 4
05.03.2017, 17:42 5
Используйте алгоритм отсюда.

Это полезнее.
https://neerc.ifmo.ru/wiki/index.php...86%D0%B8%D1%8F
0
TechRoi
0 / 0 / 0
Регистрация: 01.11.2016
Сообщений: 31
12.03.2017, 12:55  [ТС] 6
Что-то не могу подобрать набор данных, при которых программа работает
0
Lambont
92 / 91 / 61
Регистрация: 23.11.2013
Сообщений: 242
12.03.2017, 17:02 7
Цитата Сообщение от TechRoi Посмотреть сообщение
Что-то не могу подобрать набор данных, при которых программа работает
Ну размер массива A должен быть больше размера массива B (то есть N>K). Дальше, все значения массива B должны повторять фрагмент массива A.
Например N = 10, а K = 3;
для массива A введём значения: 0 1 2 3 4 5 6 7 8 9
для массива B введём значения: 2 3 4
И тогда программа найдёт вхождение:
Код
0 1 2 3 4 5 6 7 8 9
    2 3 4
1
12.03.2017, 17:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.03.2017, 17:02

В двух заданных массивах найти количество чётных и нечётных чисел (в первом - чётных, во втором - нечётных)
Даны два массива целых чисел А (15) и В (15). Найти количество четных чисел в...

Создать массив, в котором присутствуют только совпадающие элементы двух известных одномерных массивов
Надо создать массив, в котором присутствуют только елементы двух известных...

Замена символов в двух массивах
Есть 2 массива, в каждом из которого по 11 символов. Как сделать так, чтобы...


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

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

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