Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
delexa
2 / 2 / 1
Регистрация: 02.03.2011
Сообщений: 134
#1

Найти позицию самого правого вхождения - C++

19.09.2013, 01:33. Просмотров 391. Ответов 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
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <math.h>
#include <cstdio>
 
using namespace std;
 
int main()
{   freopen("right.in", "r", stdin);
    freopen("right.out","w", stdout);
 
    int n, m;
    int *mas  = new int[n];
    int *mas1 = new int[m];
    int *mas2 = new int[m];
 
 
    cin>>n>>m;
 
    for (int i=0; i<n; i++)
    cin>>mas[i];
 
 
    for (int i=0; i<m; i++ )
    cin>>mas1[i];
 
 
    for (int i=0; i<m+1; i++)
        for (int j=0; j<n; j++)
        {
            if (mas1[i]==mas[j]) mas2[i]=j;
            else mas2[i]=0;
        }
 
 
 
 
 
  for (int i=0; i<m; i++ )
    cout<<mas2[i]+1<<endl;
 
 
    return 0;
}
Миниатюры
Найти позицию самого правого вхождения   Найти позицию самого правого вхождения  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.09.2013, 01:33     Найти позицию самого правого вхождения
Посмотрите здесь:

C++ Функция, возвращающая номер самого правого вхождения заданного символа во введенную строку
Файлы: отсортировать и найти самого младшего и самого страшего с правами и без прав C++
Дана строка содержащая текст. Найти длину самого короткого и самого длинного слова. C++
Дана строка, содержащая текст. Найти длину самого короткого и самого длинного слова. C++
Найти длину самого короткого и самого длинного слова. C++
Позиция самого правого вхождения строки t в строку s C++
C++ Определить позицию первого вхождения в заданную строку какого-либо символа
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6346 / 2993 / 295
Регистрация: 04.12.2011
Сообщений: 8,029
Записей в блоге: 3
19.09.2013, 02:56     Найти позицию самого правого вхождения #2
Цитата Сообщение от delexa Посмотреть сообщение
C++
1
2
3
4
5
int n, m;
 int *mas = new int[n];
 int *mas1 = new int[m];
 int *mas2 = new int[m];
 cin>>n>>m;
Предшествующие открытия потоков нигде не используются
и еще:
чтобы создать массивы надо уже знать их размеры:
C++
1
2
3
4
5
int n, m;
cin>>n>>m;
int *mas = new int[n];
 int *mas1 = new int[m];
 int *mas2 = new int[m];
delexa
2 / 2 / 1
Регистрация: 02.03.2011
Сообщений: 134
19.09.2013, 23:42  [ТС]     Найти позицию самого правого вхождения #3
Спасибо)

исправил немного еще код

получилось

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 <iostream>
#include <math.h>
#include <cstdio>
 
using namespace std;
 
int main()
{   freopen("right.in", "r", stdin);
    freopen("right.out","w", stdout);
 
    int n, m;
    cin>>n>>m;
 
    int *mas  = new int[n];
    int *mas1 = new int[m];
    int *mas2 = new int[m];
 
    for (int i=0; i<n; i++)
    cin>>mas[i];
 
    for (int i=0; i<m; i++ )
    cin>>mas1[i];
 
    for (int i=0; i<m; i++)
        for (int j=n-1; j>=0; j--)
        {
            if (mas1[i]==mas[j]) { mas2[i]=j+1;  break; }
            else {mas2[i]=0;  }
        }
 
  for (int i=0; i<m; i++ )
    cout<<mas2[i]<<endl;
 
 
    return 0;
}

возникает вопрос. как переписать код, чтобы программа работала быстрее? а то в тесте возникает ошибка "превышено ограничение времени на тесте 9 2000 мс"
zer0mail
20.09.2013, 00:02
  #4

Не по теме:

Зачем ТС решение? Если рейтинг повысить - так это будет чужой рейтинг

delexa
20.09.2013, 00:19  [ТС]
  #5

Не по теме:

zer0mail, Синтаксис знаю и простые задачки решать вроде получется, а вот с олимпиадными проблема. Хочу набить руку на простых. Как учиться не имея примеров?

IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6346 / 2993 / 295
Регистрация: 04.12.2011
Сообщений: 8,029
Записей в блоге: 3
20.09.2013, 00:27     Найти позицию самого правого вхождения #6

Не по теме:

Цитата Сообщение от delexa Посмотреть сообщение
Как учиться не имея примеров?
Учитывая допущенные ошибки, не лучше ли порешать не олимпиадные задачи, оставив скорость, как говорят в Одессе, "на потом".

zer0mail
2308 / 1934 / 192
Регистрация: 03.07.2012
Сообщений: 6,925
Записей в блоге: 1
20.09.2013, 00:38     Найти позицию самого правого вхождения #7
delexa, как новичку, дам подсказку: почитайте про бинарные деревья, пощупайте руками, как они устроены и как ими пользоваться. Потом можете использовать их (или готовые контейнеры типа set, map) в задачах
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.09.2013, 01:11     Найти позицию самого правого вхождения
Еще ссылки по теме:

C++ Функция, определяющая позицию самого первого вхождения заданного символа в исходную строку
Как найти позицию вхождения строки? C++
Определить координаты самого нижнего и самого правого из отрицательных элементов матрицы C++
C++ Функция возвращающая позицию первого вхождения числа в массив
Функция возвращающая позицию первого вхождения числа в массив C++

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

Или воспользуйтесь поиском по форуму:
delexa
2 / 2 / 1
Регистрация: 02.03.2011
Сообщений: 134
20.09.2013, 01:11  [ТС]     Найти позицию самого правого вхождения #8
zer0mail, Огромное спасибо
Yandex
Объявления
20.09.2013, 01:11     Найти позицию самого правого вхождения
Ответ Создать тему
Опции темы

Текущее время: 02:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru