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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.88
newyork7776
347 / 340 / 79
Регистрация: 21.05.2013
Сообщений: 1,305
Завершенные тесты: 1
#1

Компьютерная игра (платформы) - C++

10.11.2013, 00:21. Просмотров 1302. Ответов 7
Метки нет (Все метки)

Во многих старых играх с двумерной графикой можно столкнуться с подобной ситуацией. Какой-нибудь герой прыгает по платформам (или островкам), которые висят в воздухе. Он должен перебраться от одного края экрана до другого. При этом при прыжке с одной платформы на соседнюю, у героя уходит |y2–y1| единиц энергии, где y1 и y2 — высоты, на которых расположены эти платформы. Кроме того, у героя есть суперприём, который позволяет перескочить через платформу, но на это затрачивается 3·|y3–y1| единиц энергии. Конечно же, энергию следует расходовать максимально экономно.

Предположим, что вам известны координаты всех платформ в порядке от левого края до правого. Сможете ли вы найти, какое минимальное количество энергии потребуется герою, чтобы добраться с первой платформы до последней?

В первой строке записано количество платформ n (1 ≤ n ≤ 30000). Вторая строка содержит n натуральных чисел, не превосходящих 30000 — высоты, на которых располагаются платформы.

Выведите единственное число — минимальное количество энергии, которую должен потратить игрок на преодоление платформ (конечно же в предположении, что cheat-коды использовать нельзя).

Примеры тестов
входные данные
3
1 5 10
выходные данные
9

входные данные
3
1 5 2
выходные данные
3

Добавлено через 1 минуту
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <vector>
#include <math.h>
using namespace std;
int main()
{
    vector <int> v;
    vector <int> q;
    int s=0,n,k,rez=0;
    cin >> n;
    for(int i=0;i<n;i++)
    {
        cin >> k;
        v.push_back(k);
    }
    rez=0;
    for(int i=2;i<n;i++)
    {
        if ((v[i-1]+v[i-1])>(v[i]))
            {
                rez+=v[i];
            }
        if ((v[i-1]+v[i-1])<=(v[i]))
            {
                rez+=(v[i-1]+v[i-1]);
            }
    }
    cout << rez << "\n";
    system("pause");
}

вот моя пародия на код
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.11.2013, 00:21     Компьютерная игра (платформы)
Посмотрите здесь:

Компьютерная графика 3D. - C++
Потребовалось мне сделать проект с 3D графикой. Т.е. надо было нарисовать плоскость Безье. Все вроде бы получилось, но во первых, хреново...

Компьютерная графика - C++
Есть две функцииvoid my_Line(int x1,int y1, int x2, int y2, int color)// Линия { int deltaX=abs(x2-x1); int deltaY=abs(y2-y1); ...

Компьютерная графика в c++ - C++
Помогите пожалуйста написать в с++ такой алгаритм, чтобы рисовать различные фигуры, к примеру прямоугольник.

Компьютерная графика - C++
Люди, прошу помощи. Мне нужно создать компьютерную 3D графику. Причем для меня это выглядело так: пришел препод, сказал всего 1 фразу, -...

Компьютерная графика и анимация - C++
Изобразить на экране монитора прямоугольник с изменяемыми длиной и шириной(+/-), расположением (стрелками). Кто-нибудь может сказать,...

Мобильные платформы и С++ - C++
Я пишу на С++ и хочу сделать прогу под Андроид. Что мне для этого нужно?

Компьютерная диагностика радио аппаратуры - C++
Программа на компютер для ремонта видео и аудио аппаратуры.Программа работает как тестер,только горит цветами(красный-не...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
10.11.2013, 00:26     Компьютерная игра (платформы) #2
newyork7776, а почему пародия? Не работает?
nokados
27 / 27 / 5
Регистрация: 30.04.2012
Сообщений: 132
10.11.2013, 00:28     Компьютерная игра (платформы) #3
Цитата Сообщение от newyork7776 Посмотреть сообщение
1 ≤ n
Если (n==1) 0 печатать?
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
10.11.2013, 00:29     Компьютерная игра (платформы) #4
На ******** есть похожие задачи. Можешь спросить там!
newyork7776
347 / 340 / 79
Регистрация: 21.05.2013
Сообщений: 1,305
Завершенные тесты: 1
10.11.2013, 00:30  [ТС]     Компьютерная игра (платформы) #5
Цитата Сообщение от Folko Посмотреть сообщение
newyork7776, а почему пародия? Не работает?
пашет но ответ кривой
nokados
27 / 27 / 5
Регистрация: 30.04.2012
Сообщений: 132
10.11.2013, 01:32     Компьютерная игра (платформы) #6
Я решил. Вот код с комментариями <КЭП> :
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
#include<iostream>
using namespace std;
 
void main()
{
    
    //Инициализация переменных
    int n;//колличество платформ
    cin>>n;//Ввод
    int* CoordsY = new int[n];//Массив с координатами платформ
    int* MinE = new int[n];//Массив с минимальными энергозатратами от начала до платформы
 
    //Ввод
    for(int i=0; i<n;i++)
        cin>>CoordsY[i];
 
    MinE[0]=0;//От начала до начала энергия не потратится
    MinE[1]=abs(CoordsY[1]-CoordsY[0]);//Здесь тоже однозначно
 
    int E1,E2;//Затраты энергиив при разных случаях
    for (int i=2;i<n;i++)//Найдем все остальные
    {
        E1=abs(CoordsY[i]-CoordsY[i-1]); //Энергия при обычном прыжке
        E2=3*abs(CoordsY[i]-CoordsY[i-2]); //Энергия при СУПЕР-прыжке
 
        //Найдем минимальную энергию, которую может затратить игрок
        if (E1+MinE[i-1]<E2+MinE[i-2])// Если выгоднее прыгнуть с ближайшей, то
            MinE[i]=E1+MinE[i-1];//прыгаем с ближайшей
        else // а если выгоднее прыгуть с дальней
            MinE[i]=E2+MinE[i-2];//то прыгаем с дальней
    }
 
    //Вывод
    cout<<MinE[n-1];
 
    system("pause >> void");
}
newyork7776
347 / 340 / 79
Регистрация: 21.05.2013
Сообщений: 1,305
Завершенные тесты: 1
10.11.2013, 12:59  [ТС]     Компьютерная игра (платформы) #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
#include <iostream>
#include <vector>
#include <math.h>
using namespace std;
 
int step(int a,int b,int c)
{
    if ((abs(a-b))>=(3*abs(a-c))) return (3*(abs(a-c)));
    else return (abs(a-b));
}
 
int main()
{
   vector <int> v;
   int q=2,n,k;
   cout << "Enter N = ";cin >> n;
   for(int i=0;i<n;i++)
   {
        cin >> k;
        v.push_back(k);
   }
   int rez=0;
   while (q==n)
   {
       if ((step(v[q],v[q-1],v[q-2])) == (3*(abs(v[q]-v[q-2]))))
       {
           q+=2;
           rez+=(3*abs(v[q]-v[q-2]));
       }
       else 
       {
           q++;
           rez+=abs(v[q]-v[q-1]);
       }
   }
    cout << rez;
    system("pause");
}

может я не понимаю основу идею,но делаю примерно так ,где я ошибся?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.11.2013, 00:41     Компьютерная игра (платформы)
Еще ссылки по теме:

Макрос определния платформы - C++
У меня вот такой вопрос: есть ли в VS макрос, отвечающий за использаванную платформу, меня интересует win32 и x64, чтобы компилировался...

Компьютерная графика: нарисовать на экране куб - C++
нужно нарисовать куб на экране, а для этого преобразовать 3д координаты в 2д помогите, пожалуйста, не могу понять как это реализовать на...

Компьютерная графика. Реализация фигуры додекаэдр - C++
class MYAPPLICATION : public APPLICATION_3D { ... // Начальные координаты мыши int mX; int mY; // Изменение...

Как добавить набор инструментов платформы? - C++
Здравствуйте! Столкнулся с проблемой, необходимо собрать проект с набором инструментов платформы vc110(Visual Studio 2010), сейчас на...

Компиляция в командной строке (cl.exe) под платформы Windows XP и выше - C++
Здравствуйте! Столкнулся с проблемой что во время компиляции в командной строке, выходной файл (.exe) не запускается на Windows XP (32...


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

Или воспользуйтесь поиском по форуму:
nokados
27 / 27 / 5
Регистрация: 30.04.2012
Сообщений: 132
11.11.2013, 00:41     Компьютерная игра (платформы) #8
1) почему
C++
1
while (q==n)
??


2)Чтобы правильно оценивать, с какой платформы нужно прыгать, нужно знать не только, сколько энергии затратится, но и сколько энергии уже затратилось. Другими словами, когда выбираешь лучший путь, минимальная энергия будет равна min(Eот дальней+Eот начала до дальней, Eот ближней+Eот начала до ближней)
где Eот дальней равна (3*abs(a-c), а Eот начала до дальней равно минимальной энергии от начала до этой платформы. Ее значение можно хранить в дополнительно массиве, созданном специально для хранения минимальных энергозатрат. Именно поэтому важно также находить минимальное расстояние от начала до каждой платформы, то есть использовать q++
Попробуй разобрать пример с вводимыми числами: 1 5 2 5
Yandex
Объявления
11.11.2013, 00:41     Компьютерная игра (платформы)
Ответ Создать тему
Опции темы

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