Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Подработка курьером - 1*/
- /*
- Вы прекрасно научились ориентироваться в настоящем двухмерном космосе и даже смогли вернуться живым из обзорного полета. Пришло время использовать полученные навыки, чтобы заработать немного галактических кредитов! Работа курьером подойдет для вас идеально. Все, что требуется развозить письма по заданным координатам, да складывать кредиты на счет. Заведите счет, привязанный к вашему кораблю и зачисляйте на него заработанные деньги!
- Кроме космокредитов, в ходу также Проторианские буллы (их курс составляет 3 кредита = 1 буллу) и Орионские звезды (их курс составляет 2 кредита = 5 звездам).
- Входные данные:
- * Имя корабля (string)
- * Текущее количество топлива (int)
- * Максимальное количество топлива (int)
- * Координаты корабля X и Y (int)
- * Количество денег на счету (int)
- Выходные данные:
- Так как у вас теперь есть официальная лицензия курьера, то вы должны подавать рапорты в общегалактической форме:
- STATUS: "имя корабля"
- Cordinates: x="х" y="y"
- Fuel: "осталось топлива" from "всего топлива"
- Account: "количество кредитов" credits
- Внимательно посмотрите на примеры!
- */
- #include <iostream>
- #include <cmath>
- #include <string>
- using namespace std;
- // координаты объекта в космосе
- class SpacePoint {
- public:
- int X, Y;
- int distance(SpacePoint point) {
- return sqrt(pow(X - point.X, 2) + pow(Y - point.Y, 2));
- }
- void read() {
- cin >> X >> Y;
- }
- void print() {
- cout << "Cordinates: x=" << X << " y=" << Y << endl;
- }
- };
- // Денежный счет
- class CreditAccount {
- public:
- // Галактические кредиты
- int credits;
- void putCredits(int count) {
- credits += count;
- }
- void putProtorianBools(int count) {
- credits += (count * 3);
- }
- void putOrionStars(int count) {
- credits += (count * 2 / 5);
- }
- void printSatus() {
- cout << "Account: " << credits << " credits" << endl;
- }
- };
- class SpaceShip {
- public:
- // Остаток топлива
- int fuelLeft;
- // Вместимость топливного бака (максимум топлива)
- int fuelMax;
- // Название корабля
- string name;
- //Координаты корабля
- SpacePoint pos;
- // Денежный счет
- CreditAccount account;
- void printStatus() {
- cout << "STATUS: " << name << endl;
- pos.print();
- cout << "Fuel: " << fuelLeft << " from " << fuelMax << endl;
- account.printSatus();
- }
- void flight(SpacePoint pt) {
- fuelLeft -= pos.distance(pt);
- if (fuelLeft < 0)
- fuelLeft = 0;
- pos = pt;
- }
- void prepare() {
- cin >> name >> fuelLeft >> fuelMax;
- pos.read();
- cin >> account.credits;
- }
- };
- int main() {
- SpaceShip ship;
- ship.prepare();
- int comCount;
- cin >> comCount;
- for (int i = 0; i < comCount; i++) {
- string com;
- cin >> com;
- if (com == "flight") {
- SpacePoint pt;
- pt.read();
- ship.flight(pt);
- }
- if (com == "cache") {
- int count;
- string name;
- cin >> count >> name;
- if (name == "credits")
- ship.account.putCredits(count);
- if (name == "bools")
- ship.account.putProtorianBools(count);
- if (name == "stars")
- ship.account.putOrionStars(count);
- }
- if (com == "status")
- ship.printStatus();
- }
- }
- /*
- Тест 1
- Ввод:
- Nostromo 56 78 12 12 756
- 4
- flight 0 12
- cache 112 stars
- cache 13 bools
- status
- Вывод:
- STATUS: Nostromo
- Cordinates: x=0 y=12
- Fuel: 44 from 78
- Account: 839 credits
- Тест 2
- Ввод:
- Enterprise 120 120 167 120 0
- 7
- flight 130 114
- cache 100 credits
- flight 115 102
- cache 300 bools
- flight 90 80
- cache 1300 credits
- status
- Вывод:
- STATUS: Enterprise
- Cordinates: x=90 y=80
- Fuel: 31 from 120
- Account: 2300 credits
- Тест 3
- Ввод:
- Lexx 100 300 0 40 50
- 5
- flight 44 65
- cache 120 stars
- flight 40 50
- cache 200 stars
- status
- Вывод:
- STATUS: Lexx
- Cordinates: x=40 y=50
- Fuel: 35 from 300
- Account: 178 credits
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement