Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 21.11.2020
Сообщений: 5
1

Задача на встречные тела. Неизвестно почему один тест из всех не проходит.

17.06.2023, 11:06. Показов 585. Ответов 3

Author24 — интернет-сервис помощи студентам
Описание задания:
Из пункта A в пункт B (расстояние между пунктами равно s0 м) выехал велосипедист со скоростью v0 км/ч. Одновременно навстречу ему из пункта B двинулся «автостопом» другой путник: s1 м он двигался со скоростью v1 км/ч, s2 м – со скоростью v2 км/ч, s3 м – со скоростью v3 км/ч. Через сколько часов после старта и в какой точке путники встретились?
Формат входных данных: [s0] [v0] [s1] [v1] [s2] [v2] [s3] [v3]. Скорость задается вещественными числами в диапазоне [0,15]. Расстояние задается целым числом в диапазоне [0,50000].
Пример: 44999 10.2 21300 3.3 3700 2.3 1000 6.6

Формат выходных данных: [время в формате часы:минуты] [пробел] [расстояние от пункта A до места встречи в метрах].
Пример: 0:35 1500 Если решения нет, то выдается сообщение «no solution».
Пример: no solution

Все тесты проходят, но при входных данных: 40000 10.0 5000 5.0 5000 5.0 10000 10.0
выдаёт не то значение, которое нужно.

реальные выходные данные: 2:24 24000
ожидаемые выходные данные: 2:30 25000

сколько бы не пытался не могу понять в чем ошибка

Мой код:
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
int main()
{
 
    int s0, s1, s2, s3, s_summ;
    float v0, v1, v2, v3, vp, ovp;
    float t0, t1, t2, t3, tv, t_summ;
    float tv1, sv1;
    int hours, minutes, seconds;
 
    scanf("%d %f %d %f %d %f %d %f", &s0, &v0, &s1, &v1, &s2, &v2, &s3, &v3);
 
    if ((s0 < 0 || s0 > 50000) || ((s1 < 0 || s1 > 50000)) || ((s2 < 0 || s2 > 50000)) || ((s3 < 0 || s3 > 50000))) {
        printf("invalid input data");
        return 0;
    }
 
 
    if ((v0 < 0 || v0 > 15) || ((v1 < 0 || v1 > 15)) || ((v2 < 0 || v2 > 15)) || ((v3 < 0 || v3 > 15))) {
        printf("invalid input data");
        return 0;
    }
    
        v0 = v0 / 3.6;
        v1 = v1 / 3.6;
        v2 = v2 / 3.6;
        v3 = v3 / 3.6;
 
        t0 = s0 / abs(v0);
        t1 = s1 / abs(v1);
        t2 = s2 / abs(v2);
        t3 = s3 / abs(v3);
 
        s_summ = s1 + s2 + s3;
 
        if ((s0 == 0 || t0 == 0 || v0 == 0) && ((s_summ < s0) || (s_summ > s0))) {
            printf("no solution");
            return 0;
        }
 
        if (s0 - (v0 * (s0 / (v0 + v1))) <= s1) {
            tv1 = round(s0 / (v0 + v1));
            sv1 = (v0 * (s0 / (v0 + v1)));
            hours = tv1 / 3600;
            minutes = (tv1 - hours * 3600) / 60;
            
            printf("%d:%02d %d", int(hours), int(minutes), int(sv1));
            return 0;
        }
 
        if (s0 - (v0 * (s0 / (v0 + ((s1 + s2) / (t1 + t2))))) <= s1 + s2) {
            tv1 = round((s0 / (v0 + ((s1 + s2) / (t1 + t2)))));
            sv1 = v0 * (s0 / (v0 + ((s1 + s2) / (t1 + t2))));
 
            hours = tv1 / 3600;
            minutes = (tv1 - hours * 3600) / 60;
           
            printf("%d:%02d %d", int(hours), int(minutes), int(sv1));
            return 0;
        }
 
 
        if (s0 - (v0 * (s0 / (((s1 + s2 + s3) / (t1 + t2 + t3))))) <= s_summ) {
            tv1 = round(s0 / (v0 + ((s1 + s2 + s3) / (t1 + t2 + t3))));
            sv1 = v0 * (s0 / (v0 + ((s1 + s2 + s3) / (t1 + t2 + t3))));
 
            hours = tv1 / 3600;
            minutes = (tv1 - hours * 3600) / 60;
           
            printf("%d:%02d %d", int(hours), int(minutes), int(sv1));
            return 0;
        }
        else {
            tv1 = round((s0 - s_summ) / v0);
            sv1 = s0 - s_summ;
            hours = tv1 / 3600;
            minutes = (tv1 - hours * 3600) / 60;
            
            printf("%d:%02d %d", int(hours), int(minutes), int(sv1));
            return 0;
        }
 
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.06.2023, 11:06
Ответы с готовыми решениями:

Физическая задача на встречные тела. Нужен фикс погрешности
Условие задачи: Из пункта A в пункт B (расстояние между пунктами равно s0 м) выехал велосипедист...

Решение не проходит один тест. Задача: разрезанный прямоугольник
Здравствуйте! Задача состоит в следующем: На плоскости нарисовали прямоугольник, после чего...

Задача не проходит тест
Добрый день. Есть такая простая задача. /* Нужно добавить в программу новую функциональность...

Задача не проходит тест
Здравствуйте! Нашел задачу и попробовал решить и вроде бы работает, и тесты все проходит, но...

3
Лежебока
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 2
18.06.2023, 19:47 2
Цитата Сообщение от TheLedGame Посмотреть сообщение
Одновременно навстречу ему из пункта B двинулся «автостопом» другой путник: s1 м он двигался со скоростью v1 км/ч, s2 м – со скоростью v2 км/ч, s3 м – со скоростью v3 км/ч.
Как понять эту строку?
0
Вездепух
Эксперт CЭксперт С++
12785 / 6663 / 1794
Регистрация: 18.10.2014
Сообщений: 16,854
18.06.2023, 20:07 3
Цитата Сообщение от TheLedGame Посмотреть сообщение
Из пункта A в пункт B (расстояние между пунктами равно s0 м) выехал велосипедист со скоростью v0 км/ч. Одновременно навстречу ему из пункта B двинулся «автостопом» другой путник: s1 м он двигался со скоростью v1 км/ч, s2 м – со скоростью v2 км/ч, s3 м – со скоростью v3 км/ч. Через сколько часов после старта и в какой точке путники встретились?
Так а если s1+s2+s3 < s0, то что это значит? Что автостоппер остановился в точке s1+s2+s3 и после этого уже никуда не двигался?
0
Эксперт функциональных языков программированияЭксперт С++
4130 / 1944 / 960
Регистрация: 01.06.2021
Сообщений: 6,867
Записей в блоге: 6
18.06.2023, 21:27 4
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Так а если s1+s2+s3 < s0, то что это значит?
Вариант 1. Если посоны не встретились до точки s1+s2+s3, то они обязательно встретятся на этой точке, ибо посон №2 стоит как штык на этой точке.
Вариант 2. Посоны могут встретиться до точки s1+s2+s3, ибо потом посон № 2 просто уничтожается. В таком случае, выводится «no solution».
Вариант 3. Во время ввода проверяется и если s1+s2+s3 != s0, то выводится «no solution».

Хотя, учитывая пример ТС, последний вариант вроде не подходит.
0
18.06.2023, 21:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.06.2023, 21:27
Помогаю со студенческими работами здесь

Задача про сапожника, не проходит тест
В некоей воинской части есть сапожник. Рабочий день сапожника длится n минут. Заведующий складом...

Задача по преобразованию XML не проходит все тесты, дает ошибку “Неправильный ответ на тест 8”
Задача по преобразованию XML не проходит все тесты, дает ошибку &quot;Неправильный ответ на тест 8&quot;,...

В цикле почему-то проходит по условию только один раз
Задача такая: Дан одномерный массив и натуральных чисел. Удалить из него все тройки подряд идущих...

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

Задача "Распаковка строки" не проходит 9й тест
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;cstring&gt; using namespace std; //#define...

Задача "Зайчики" не проходит тест
Не проходит 36 тест, хотя при собственной проверке, выдает все правильно. Не могу понять: в каком...

Не проходит тест. Должен возвращать пустой список[], а тест говорит, что возвращает это "[\"\"]"
Получаем слово и надо его перебрать и получить такой список Все работает, но именно с пустым...


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

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