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

Сравнение заданной последовательности с эталонной

13.06.2016, 13:11. Просмотров 627. Ответов 8
Метки нет (Все метки)

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

Степенью «правильности» последовательности (СПП) называется максимальное количество чисел, которые идут в ней в том же порядке, что и в эталонной при вычеркивании других.

Например, есть эталон: 33,8, 5,101,43,200

и последовательность: 44,77,33,216,8,6, 8, 5,20,101,3,45,43

которая содержит 2 фрагмента эталона: 33,8

и: 8, 5,101, 43.

Т.е. СПП=4.Помогите пожалуйста решить.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.06.2016, 13:11
Ответы с готовыми решениями:

В заданной последовательности слов найти все слова, начинающиеся с заданной приставки
В заданной последовательности слов найти все слова, начинающиеся с заданной приставки. Помогите...

В заданной последовательности слов найдите все слова, начинающиеся с заданной приставки
Люди помогите с задачкой, я пишу на паскале а язык С++ я попросту не знаю...))) В долгу не...

Заменить значения всех элементов заданной строки матрицы числами заданной последовательности
Дан двумерный массив (MxN). Составить программу, которая заменяет значения всех элементов некоторой...

В матрице найти сдвиг от эталонной
Ребят помогите как попроще можно найти сдвиг матрице от эталонной так сказать. Допустим есть...

Найти числа из заданной последовательности, которые делятся на все числа из другой последовательности
Вход программы имеет следующий формат. Сначала вводится N > 0- количество чисел в...

8
Ferrari F1
795 / 524 / 157
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
Завершенные тесты: 1
13.06.2016, 13:57 2
покажи свой код плес
0
Pavelvg
0 / 0 / 0
Регистрация: 25.02.2016
Сообщений: 7
13.06.2016, 14:14  [ТС] 3
у меня нет кода , я прошу помочь мне.
0
fire_Rising
10 / 11 / 7
Регистрация: 11.05.2016
Сообщений: 113
13.06.2016, 14:19 4
Есть идея как это сделать, делаешь дополнительный массив, в который будешь записывать совпадения эталонной последовательности и последовательности. А потом просто рассматривать сам доп массив и смотреть в каком порядке там все идет

т.е. просто создать условие для равенства и сделать flag для остановки, если не совпадает
0
13.06.2016, 14:19
Pavelvg
0 / 0 / 0
Регистрация: 25.02.2016
Сообщений: 7
13.06.2016, 14:25  [ТС] 5
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
55
56
57
58
59
60
61
62
63
64
65
66
67
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
const int n=15;
int utalon[15] = {33,56,78,12,49,67,92,31,22,25,37,54,15,84,11};
void zapolnen(int *l,int k)
{
    srand(time(NULL));
    for(int i=0;i<k;i++)
    l[i] = rand()%92;
}
void vuvod(int *l,int k)
{
    for(int i=0;i<k;i++)
        cout << l[i] << setw(3);
    cout << endl;
}
int main()
{
    setlocale(NULL,"rus");
    int g=0;
    cout << "Введите размер последовательности ";
    cin >> g;
    int* posled = new int[g];
    zapolnen(posled,g);
    vuvod(posled,g);
    int a=0,s=0;
    for(int i=0;i<n;i++)
        for(int j=0;j<g;j++)
        {
            if(posled[j] == utalon[i])
                a++;
            if(posled[j] == utalon[i])
                s++;
        }
        int* posled1 = new int[s];
        int* utalon1 = new int[a];
        int b=0,m=0;
        for(int i=0;i<n;i++)
        for(int j=0;j<g;j++)
        {
        /*  if(utalon[i] == posled[j])
            {
                posled1[b] = posled[j];
                b++;
            }*/
            if(posled[j] == utalon[i])
            {
                utalon1[m] = utalon[i];
                m++;
            }
        }
        for(int i=0;i<g;i++)
            for(int j=0;j<n;j++)
            {
                if(posled[i] == utalon[j])
            {
                posled1[b] = posled[i];
                b++;
            }
            }
        vuvod(utalon1,m);
        vuvod(posled1,b);
    system("pause");
    return 0;
}
я вывел две последовательности чисто совпадения , а вот как бы красиво их сравнить пока понять не могу
0
fire_Rising
10 / 11 / 7
Регистрация: 11.05.2016
Сообщений: 113
13.06.2016, 14:27 6
void vuvod(int *l,int k) зачем сюда передавать указатель? ты же просто выводишь, никак не изменяешь
0
Pavelvg
0 / 0 / 0
Регистрация: 25.02.2016
Сообщений: 7
13.06.2016, 14:30  [ТС] 7
просто ошибся
0
fire_Rising
10 / 11 / 7
Регистрация: 11.05.2016
Сообщений: 113
13.06.2016, 14:31 8
Pavelvg, ты слишком усложнил себе жизнь

Добавлено через 27 секунд
Pavelvg, и что что динамический? ты же его заполнил уже
0
Pavelvg
0 / 0 / 0
Регистрация: 25.02.2016
Сообщений: 7
14.06.2016, 10:05  [ТС] 9
это я понимаю , просто ошибся спешил

Добавлено через 2 часа 50 минут
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
55
56
57
58
59
60
61
62
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
const int n=15;
int utalon[15] = {33,56,78,12,49,67,92,31,22,25,37,54,15,84,11};
void zapolnen(int *l,int k)
{
    srand(time(NULL));
    for(int i=0;i<k;i++)
    l[i] = rand()%92;
}
void vuvod(int l[],int k)
{
    for(int i=0;i<k;i++)
        cout << l[i] << setw(3);
    cout << endl;
}
int main()
{
    setlocale(NULL,"rus");
    int g=0;
    cout << "Введите размер последовательности ";
    cin >> g;
    int* posled = new int[g];
    zapolnen(posled,g);
    int a=0,s=0;
    for(int i=0;i<n;i++)
        for(int j=0;j<g;j++)
            if(posled[j] == utalon[i])
                a++;
        int* posled1 = new int[s];
        int b=0;
        for(int i=0;i<g;i++)
            for(int j=0;j<n;j++)
                if(posled[i] == utalon[j])
            {
                posled1[b] = posled[i];
                b++;
            }
        cout << "СПП: ";
        vuvod(utalon,n);
        cout << "Произвольная последовательность: ";
        vuvod(posled,g);
        int z=0,q=0;
        for(int i=0;i<n;i++)
        {
            for(int j=z;j<g;j++)
            {
                if(utalon[i] == posled[j])
                {
                    cout << utalon[i] << " ";
                    z=j;
                    q++;
                }
            }
        }
        cout << endl;
        cout << "СПП=" << q << endl;
    system("pause");
    return 0;
}
Вроде работает.

Добавлено через 16 часов 43 минуты
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 "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
const int n=15;
int utalon[15] = {33,56,78,12,49,67,92,31,22,25,37,54,15,84,11};
void zapolnen(int *l,int k)
{
    srand(time(NULL));
    for(int i=0;i<k;i++)
    l[i] = rand()%92;
}
void vuvod(int l[],int k)
{
    for(int i=0;i<k;i++)
        cout << l[i] << setw(3);
    cout << endl;
}
int main()
{
    setlocale(NULL,"rus");
    int g=0;
    cout << "Введите размер последовательности ";
    cin >> g;
    int* posled = new int[g];
    zapolnen(posled,g);
        cout << "СПП: ";
        vuvod(utalon,n);
        cout << "Произвольная последовательность: ";
        vuvod(posled,g);
        int z=0,q=0;
        for(int i=0;i<n;i++)
        {
            
            for(int j=z;j<g;j++)
            {
                if(utalon[i] == posled[j])
                {
                    cout << utalon[i] << " ";
                    z=j;
                    q++;
                    break;
                }
            }
        }
        cout << endl;
        cout << "СПП=" << q << endl;
    system("pause");
    return 0;
}
Вот годный код
0
14.06.2016, 10:05
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.06.2016, 10:05

Прием, передача и сравнение последовательности Баркера
Подскажите пожалуйста.Пишу программу клиент-сервер. Клиент передает м-последовательность или...

Сравнение элемента последовательности и параметра цикла
Ребят, помогите в Си перевести как нибудь написать код, это сортировка вырожденным распределением:...

Найти НОД заданной последовательности
Вводим количество элементов в последовательности. Вводим элементы. Программа находит НОД всех...


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

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

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