7 / 6 / 1
Регистрация: 08.04.2021
Сообщений: 151
1

Вася строит дом

14.06.2021, 14:57. Показов 5147. Ответов 4
Метки с++ (Все метки)

Вася строит дом
Мальчик Вася живёт на координатной прямой. На этой прямой в точке A располагается школа, а в точке B — любимый Васин компьютерный клуб. Также в точках …,−d,0,d,…,k⋅d,…, где k — произвольное целое число, а d — чётное натуральное число, расположены киоски с мороженым. Вася хочет построить дом в некоторой точке с целой координатой. При этом, ему хочется, чтобы расстояние от дома до школы и от дома до компьютерного клуба было одинаковым. Если это вдруг невозможно, то он хочет, чтобы сумма этих расстояний была как можно меньше, а также чтобы расстояния отличались как можно меньше друг от друга. Если под Васин дом подходит несколько вариантов точек, то он выберет ту, расстояние от которой до ближайшего киоска с мороженым минимально. Помогите Васе выбрать точку, где строить дом, а также выведите расстояние до ближайшего киоска с мороженым. Вася может строить дом в точке, где уже есть другие строения.

Входные данные

В единственной строке входных данных заданы три числа — A, B и d. Гарантируется, что A и B — целые числа, по модулю не превышающие 2⋅109, A≠B. d — чётное натуральное число, 2≤d≤2⋅109.

Выходные данные

В единственной строке выходных данных выведите два целых числа — координату точки, где Васе необходимо построить дом, и расстояние до ближайшего киоска с мороженым.


Примеры
Ввод Вывод
1 5 4 3 1
1 6 4 4 0

Написала код, но тестирущая система говорит программа выдает неправильный ответ. Прошу помогите пожалуйста, хотя бы неработающем тестом. УМОЛяю...

#include <cmath>
#include <iostream>
using namespace std;
int main()
{
int a, b, d, j, it, sd, d1, d2;
double k;
cin >> a;
cin >> b;
cin >> d;
int s_mu_ab;
if (((a >= 0) && (b >= 0)) || ((a <= 0) && (b <= 0))) // находим расстояние между a и b
s_mu_ab = abs(abs(a) - abs(b));
else
s_mu_ab = abs(a) + abs(b);
k = (a + b) / 2.0; //координата середины
j = (a + b) / 2;
if (k - j == 0) {
it = k;
sd = min(abs(it % d), d - abs(it % d));
}
else {
int k1 = k + 0.5;
int k2 = k - 0.5;
d1 = min(abs(k1 % d), d - abs(k1 % d));
d2 = min(abs(k2 % d), d - abs(k2 % d));
if (d1 < d2) {
it = k1;
sd = d1;
}
else {
it = k2;
sd = d2;
}
}
cout << it << " " << sd;
return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.06.2021, 14:57
Ответы с готовыми решениями:

Вася строит дом
Помогите решить задачу! Вася строит дом Мальчик Вася живёт на координатной прямой. На этой прямой...

Задача: Вася строит дом
Здравствуйте, имеется такая задача: Мальчик Вася живёт на координатной прямой. На этой прямой в...

Вася и Петя решили потренироваться в арифметике. Вася загадал какое-то число, а Петя начал перечислять операции
Добрый вечер, столкнулся с одной задачей и не очень понимаю что я делаю не так, буду очень...

Вася Пупкин и вася пупкин для Яши не одно и тоже.
Продвигаю книжный сайт, там есть книга автора Васи Пупкина. Двигаем это слово &quot;Вася Пупкин&quot;....

4
390 / 258 / 194
Регистрация: 02.05.2017
Сообщений: 1,003
14.06.2021, 15:37 2
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 <cmath>
 
using namespace std;
 
#define ll long long
 
ll f(ll n,ll d){
 
    return min((n % d),d-(n%d));
 
}
 
int main()
{
    ll a,b,d;
    cin >> a >> b >> d;
 
    ll c = (a+b)/2;
 
    if((a + b)%2){
 
        ll first = f(c,d);
        ll second = f(c+1,d);
 
        if(first < second)cout << c << ' ' << first;
        else cout << c+1 << ' ' << second;
 
 
    } else cout << c << ' ' << f(c,d);
 
 
 
 
    return 0;
}
0
7 / 6 / 1
Регистрация: 08.04.2021
Сообщений: 151
14.06.2021, 17:00  [ТС] 3
не проходит, "не верный ответ"
0
390 / 258 / 194
Регистрация: 02.05.2017
Сообщений: 1,003
14.06.2021, 19:33 4
Лучший ответ Сообщение было отмечено alimaaa как решение

Решение

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 <cmath>
 
using namespace std;
 
#define ll long long
 
ll f(ll n,ll d){
 
    return min((n % d),d-(n%d));
 
}
 
int main()
{
    ll a,b,d;
    cin >> a >> b >> d;
 
    ll c = floor((a+b)/2.0);
 
    if((a + b)%2){
 
        ll first = f(abs(c),d);
        ll second = f(abs(c+1),d);
 
        if(first < second)cout << c << ' ' << first;
        else cout << c+1 << ' ' << second;
 
 
    } else cout << c << ' ' << f(abs(c),d);
 
 
 
 
    return 0;
}
0
7 / 6 / 1
Регистрация: 08.04.2021
Сообщений: 151
15.06.2021, 12:26  [ТС] 5
Спасибо огромное !!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.06.2021, 12:26
Помогаю со студенческими работами здесь

Проверить, содержит ли указанное предложение слово «дом».(дом и домашний – разные слова)
Добрый вечер не могли бы помочь доделать программу. написал программу которая пытается выполнить...

Обновить запись, где запись = условию. Всех "Вася Пупки" на "Вася Петечкин".
Приветствую. Как правильно сформулировать запрос который выполнил бы следующее. Есть таблица...

Запросить имя пользователя и напечатать "Привет, Вася!" 10 раз, если Вася – имя пользователя.
Ребят,подскажите,как делать)хотя бы идею) 1. Запросить имя пользователя и напечатать &quot;Привет,...

Дом - Школа - Дом
Мальчик Вася каждый день ездит на метро. Утром он едет в школу, а вечером того же дня, обратно из...

Дом - Школа - Дом
Мальчик Вася каждый день ездит на метро. Утром он едет в школу, а вечером того же дня, обратно из...

Отличник Вася
Вася - отличник. Он радуется каждой пятёрке, которую увидит в числе. Каждое утро он едет на...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru