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

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

Войти
Регистрация
Восстановить пароль
 
KnockKnock
1 / 1 / 0
Регистрация: 04.11.2012
Сообщений: 11
#1

Ошибка во время выполнения программы. - C++

04.11.2012, 21:50. Просмотров 1062. Ответов 9
Метки нет (Все метки)

Здравствуйте, помогите, пожалуйста, разобраться. Пытаюсь сдать задачу, из 27 тестов в трех - ошибка во время выполнения программы.

Условие:
Кликните здесь для просмотра всего текста
Как и у каждого мальчика, у Феди есть игрушечные машинки. Однако ему повезло больше, чем обычному мальчику — все n его машинок являются радиоуправляемыми. Целыми днями он может устраивать различные автогонки и играть с друзьями.

Из всех видов гонок Федя предпочитает гонки по прямой. В данном формате соревнования трасса имеет форму прямой и является бесконечной (соревнования идут до тех пор, пока Феде это не надоест). Изначально каждая из n машинок находится на некотором расстоянии от старта — имеет фору xi метров. По команде все машинки начинают свое движение от старта, при этом каждая машинка движется во время гонки с постоянной скоростью vi метров в секунду. Все машинки движутся в одном направлении — удаляются от старта.

Недавно Феде подарили видеокамеру, и он хочет заснять яркие моменты гонки. Прежде всего Федя хочет запечатлеть первый обгон гонки, то есть первый момент времени, в который две машины находятся на одном расстоянии от старта.

Так как этого события можно ждать очень долго, Федя хочет настроить камеру на автоматическое включение во время обгона. Однако, Федя самостоятельно не может найти время, которое пройдет со времени начала гонки до времени первого обгона. Помогите Феде — напишите программу, находящую искомую величину.

Формат входных данных
В первой строке входного файла содержится единственное число n — количество машинок на трассе (2 <= n <= 100). Каждая из следующих n строк содержит по два целых числа xi и vi — расстояние от старта (в метрах) и скорость машинки i (в метрах в секунду) соответственно (1<= xi,vi <= 1000).

Исходно никакие две машинки не находятся в одной точке. Гарантируется, что хотя бы один обгон во время гонки произойдет.

Формат выходных данных
В выходной файл выведите количество секунд, которое пройдет с момента старта до момента первого обгона, с точностью не менее 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
#include <iostream>
using namespace std;
 
 
int main ()
{
    long n, k;
    double x [101];
    double v [101];
 
    double res [101];
 
    cin >> n;
 
    for (long i = 0; i < n; i++)
    {
        cin >> x[i] >> v[i];
    }
 
    
    k = 0;
 
    for (long i = 0; i < n; i++)
        for (long j = 0; j < n; j++)
        {
            if (i == j) continue;
            if ( (v[i] > v[j]) && (x[i] < x[j]) ) {
                res [k] = (x[j] - x[i]) / (v[i] - v[j]);
                k++;
            }
        }
        
    
    double min = res [0];
    for (long i = 0; i < k; i ++) {
        if (res[i] < min) min = res [i];
    }
    
    
    cout << min;
 
 
    return 0;
}
Скорости гарантированно разные при делении, значит, на ноль не должно быть деления... В чём может быть проблема?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2012, 21:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка во время выполнения программы. (C++):

Ошибка во время выполнения программы - C++
Здравствуйте, есть задача Дано два списка чисел, числа в первом списке упорядочены по неубыванию. Для каждого числа из второго списка...

Укажите где ошибка (ошибка во время выполнения программы) - C++
Здравствуйте, помогите пожалуйста найти ошибки в коде которые возникаю при выполнении программы Картинка с ошибкой внизу поста. Код: ...

Ошибка во время выполнения программы (размещения с повторениями) - C++
Давно я не заходил на прекрасный форум...Надеюсь, найдутся люди, которые смогут помочь... Итак, задача: Даны N целых чисел x1,...

Во время выполнения программы результат не выводится. Где ошибка? - C++
Здравствуйте. Помогите, пожалуйста, найти ошибку в коде. Задание звучит так. Дан массив 4х5, нужно создать одномерный массив и...

Время выполнения программы - C++
Здравствуйте.Я до сих пор новичок в программировании,сразу скажу,и тонкостей не знаю. Собрал я тут программу с использованием CUDA.И...

Определить время выполнения программы - C++
Господа как засеч време выполнение программы? Заранее всем огромное спасибо!!!

9
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
04.11.2012, 21:59 #2
Ошибка во время выполнения - завалился тест или прога вылетела?

Добавлено через 1 минуту
если второе, то проблема в этом
C++
1
double res [101];
т.е. фиксированный размер массива
и здесь:
C++
1
res [k] = (x[j] - x[i]) / (v[i] - v[j])
может произойти выход за границы массива
Пример. 100 машинок, которые расположены так, что чем ближе к старту, тем выше скорость. Соответственно, нужно перебрать все возможные пары, которых наверняка больше 101
0
KnockKnock
1 / 1 / 0
Регистрация: 04.11.2012
Сообщений: 11
04.11.2012, 23:03  [ТС] #3
Это именно ошибка в процессе. На сайте отправляешь cpp-файл, он компилируется и прогоняется через некоторое количество тестов. В комментариях к заваленному тесту указано только, что прога вылетает...
Делал размеры массивов с запасом (каждый по 2 тысячи, например), не спасает положение.
0
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
04.11.2012, 23:08 #4
А этот массив вообще нужен? Разве нельзя на ходу считать минимум?

Добавлено через 2 минуты
Я про double res [101];

И "с запасом" если и делать, то надо учитывать самый плохой случай, который я указал выше. Это примерно 5000 вариантов
0
KnockKnock
1 / 1 / 0
Регистрация: 04.11.2012
Сообщений: 11
04.11.2012, 23:27  [ТС] #5
В этом была причина, да... Забыл нормально посчитать максимальное количество результатов =\
Переписал без массива, прошло все тесты. Спасибо за верную мысль.
Ведь хотел же сразу нормально написать, зачем-то решил с массивом делать =\
0
valeriikozlov
Эксперт С++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
04.11.2012, 23:29 #6
KnockKnock, отсортируйте машинки по удаленности от старта, тогда минимум нужно будет искать между парами x[i] и x[i-1]. Максимум 99 вариантов.
0
KnockKnock
1 / 1 / 0
Регистрация: 04.11.2012
Сообщений: 11
04.11.2012, 23:34  [ТС] #7
Да я перед написанием подумал, что сортировать по затратам времени не сильно выгоднее, чем просто сравнить каждую с каждой в обеих сочетаниях, а потом вот сильно залип над этой ошибкой. Собственно, из-за мыслей о максимум 99 вариантах при сортировке и забыл напрочь про размер массива res...
0
Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
04.11.2012, 23:35 #8
не подскажите откуда задача?)
0
KnockKnock
1 / 1 / 0
Регистрация: 04.11.2012
Сообщений: 11
04.11.2012, 23:41  [ТС] #9
Почему, подскажу
http://informatics.mccme.ru/moodle/m...apterid=3019#1
0
Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
05.11.2012, 00:30 #10
KnockKnock, спасибо
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.11.2012, 00:30
Привет! Вот еще темы с ответами:

Уменьшить время выполнения программы - C++
#include &lt;iostream&gt; using namespace std; int main() { int n; cin &gt;&gt; n; char mas; int k;

Посчитать время выполнения программы - C++
В среде visual studio 2012 можно? или в коде написать что нужно, подскажите

Определить время выполнения программы - C++
Как узнать сколько выполняется программа на С++.Т.е. что бы со всеми результатами,скажем в конце, выводилось еще и ее время выполнения,...

Определить время выполнения программы - C++
В связи с доработкой алгоритма разных прог, иногда необходимо посмотреть на сколько повысилась производительность и уменьшилось время...


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

Или воспользуйтесь поиском по форуму:
10
Yandex
Объявления
05.11.2012, 00:30
Ответ Создать тему
Опции темы

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