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

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

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

Определить длину ломаной по координатам - C++

22.06.2013, 17:20. Просмотров 961. Ответов 2
Метки нет (Все метки)

Здравствуйте.
Проблема с решением задачи "Ловушки".
Далеко не все в Тентуре имеют право носить малиновые штаны, и конечно, не все владеют пепелацем с гравицапой, зато один предприимчивый чатланин поставил несколько ловушек, захватывающих отваливающиеся детали с пролетающих мимо инопланетных кораблей. Каждое утро он их обходит, в надежде, что рано или поздно из этих запчастей ему удастся собрать какое-нибудь транспортное средство. Путь свой чатланин планирует по карте, на которой аккуратно отмечены ловушки, отсчитывая начало координат от собственного дома. Начинается обход от дома, и в нем же и заканчивается.
Требуется определить, какое расстояние проходит чатланин за день.

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

В первой строке входного файла INPUT.TXT находится натуральное число N – количество ловушек, установленных чатланином (N<=10), далее следуют N строк формата «X Y», описывающих координаты ловушек в порядке их обхода (-10 <= X,Y <= 10; X,Y – целые числа).

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

В выходной файл OUTPUT.TXT выведите общее расстояние, которое пройдет чатланин, обойдя все ловушки в приведенном порядке и вернувшись в начало координат от последней ловушки, с точностью до трех знаков после запятой.
Алгоритм ясен, ломаная образует многоугольник, начальная и конечная вершина которого - 0;0.
Моё решение:
C++ (Qt)
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
#include <stdio.h>
#include <math.h>
#include <cstdio>
#include <algorithm>
#include <cstring>
 
int main()
{
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
    int N;
    scanf("%d", &N);
    int X[11];
    int Y[11];
    double S;
    S = 0;
    X[0] = 0;
    Y[0] = 0;
    X[N+1] = 0;
    Y[N+1] = 0;
    double Z;
    double C;
    Z = C = 0;
    for (int i = 1; i <= N; ++i)
    {
        scanf("%d", &X[i]);
        scanf("%d", &Y[i]);
    }
    for (int i = 1; i <= N+1; ++i)
    {
 
        Z = (X[i]-X[i-1])*(X[i]-X[i-1]);
        C = (Y[i]-Y[i-1])*(Y[i]-Y[i-1]);
        S += sqrt(abs(Z) + abs(C));
    }
    printf("%.3lf", S);
    return 0;
}
Всё хорошо, но на 6 тесте валится с Time Limit'ом. В чём может быть проблема?

Добавлено через 5 минут
Тест Результат Время Память
1 Accepted 0,021 60 Кб
2 Accepted 0,009 60 Кб
3 Accepted 0,009 60 Кб
4 Accepted 0,009 60 Кб
5 Accepted 0,008 60 Кб
6 Time limit exceeded 1,349 1412 Кб
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.06.2013, 17:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Определить длину ломаной по координатам (C++):

Найти длину кратчайшей ломаной - C++
Даны координаты N точек на плоскости. Найти длину кратчайшей ломаной, соединяющей эти точки. совсем нет идей как это сделать, приходит...

Создать класс и вычислить длину ломаной линии - C++
Создать класс linXY - ломаная линия, принадлежащая первому квадранту плоскости. Функция-член класса: вычисление длины ломаной линии....

Вычислить длину отрезка по координатам вершин - C++
1)разработать функцию f(x1,y1, x2, y2), которая вычисляет длину отрезка по координатам вершин (x1,y1) и (х2,у2), и функцию d(a,b,c),...

Вычислить длину отрезка по координатам вершин - C++
Разработать функцию f(x1,y1,x2,y2),которая вычисляет длину отрезка по координатам вершин (x1,xy1) и (x2,y2) и функцию t(a,b,c) которая...

Вычислить длину сторон четырехугольника по координатам вершин - C++
1) Заданы координаты вершин четырехугольника в плоскости: (х1; у1), (х2; y2), (x3; y3), (x4; y4). Вычислить длину его сторон.

По введенным координатам вершин треугольника найти длину медианы - C++
Нужно найти длину медианы, вводятся координаты вершин треугольника

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Евгений М.
1035 / 976 / 54
Регистрация: 28.02.2010
Сообщений: 2,829
Завершенные тесты: 2
22.06.2013, 17: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
#include <stdio.h>
#include <math.h>
 
int main()
{
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
    int N;
    scanf("%d", &N);
    int X[11];
    int Y[11];
    double S;
    S = 0;
    X[0] = 0;
    Y[0] = 0;
    X[N+1] = 0;
    Y[N+1] = 0;
    double Z;
    double C;
    Z = C = 0;
    for (int i = 1; i <= N; ++i)
    {
        scanf("%d %d", &X[i], &Y[i]);
        Z = (X[i]-X[i-1])*(X[i]-X[i-1]);
        C = (Y[i]-Y[i-1])*(Y[i]-Y[i-1]);
        S += sqrt(Z + C);
    }
    Z = X[N]*X[N];
    C = Y[N]*Y[N];
    S += sqrt(Z + C);
    printf("%.3lf", S);
    return 0;
}
ZaMaZaN4iK
Мой лучший друг-отладчик!
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
22.06.2013, 17:54 #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
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
#include <cmath>
 
using namespace std;
typedef double ld;
typedef long long ll;
 
const ll maxi=12;
ll n,i;
ld x,y,pred_x,pred_y,sum=0.0;
 
void input()
{
    cin>>n;
}
 
void solve()
{
    pred_x=pred_y=0.0;
    for(i=0;i<n;++i)
    {
        cin>>x>>y;
        sum+=sqrt(pow(pred_x-x,2.0)+pow(pred_y-y,2.0));
        pred_x=x;pred_y=y;
    }
    sum+=sqrt(pow(pred_x,2.0)+pow(pred_y,2.0));
}
 
 
void output()
{
    cout<<fixed;
    cout<<showpoint;
    cout.precision(3);
    cout<<sum;
}
 
 
 
int main()
{
    ios_base::sync_with_stdio(0);
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
    input();
    solve();
    output();
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.06.2013, 17:54
Привет! Вот еще темы с ответами:

Разработать метод, вычисляющий длину отрезка по координатам вершин - C++
Разработать метод f(x1, y1, x2, y2) , который вычисляет длину отрезка по координатам вершин (x1,y1) и (x2, y2) , и метод min(a, b)...

Определить расстояние от данной точки до ломаной - C++
Есть задача. Вот ее краткий пересказ. На плосткости дана точка с координатами x и у. Дано n. На плоскости дано n точек, попарно...

Разработать метод f(x1, y1, x2, y2), который вычисляет длину отрезка по координатам вершин - C++
Разработать метод f(x1, y1, x2, y2), который вычисляет длину отрезка по координатам вершин (x1, y1) и (x2, y2), и метод d(a, b, c),...

Напишите функцию Otrezok (x1, y1, x2, y2), которая находит длину отрезка AB по заданным координатам - C++
Неплохие задачи по С++! Подзабыл его( выручайте, буду очень благодарен 1. Даны координаты двух точек A(x1, x2) и B(x2, y2)...


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

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

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