Гексагон, помогите составить описание, как работает программа
1. Постановка задачи
Поле для игры в новую игру "Гексагон" разбито на шестиугольники (см. рисунок). Игрок, стартуя из некоторого начального шестиугольника, сделал несколько ходов. Каждый ход заключается в перемещении фишки в соседний шестиугольник (имеющий с тем, где находилась фишка до начала хода, общую сторону) — тем самым, ход делается вдоль одного из направлений X, Y или Z (см. рисунок). Игрок записал все свои ходы, причем если фишка двигалась вдоль какого-либо направления несколько раз подряд, то в записи это обозначается указанием направления и количества ходов, которые были сделаны. Напишите программу, которая найдет кратчайший (по количеству совершаемых ходов) путь в начальную клетку из той, где фишка оказалась после ходов игрока. 2. Характеристика входной и выходной информации Ввод: В первой строке входного файла записано число N — количество строк в записи перемещений фишки (1<N<100). Далее идет N строк с записью ходов: в каждой строке записана сначала большая буква X, Y или Z, задающая направление, затем пробел, и число, задающее количество ходов в данном направлении (число может быть и отрицательным, если игрок перемещал фишку параллельно оси, но в направлении, противоположном направлению оси). Все числа по модулю не превышают 200. 4 Z -2 Y 3 Z 3 X -1 Вывод: В выходной файл выведите описание кратчайшего пути обратно в начальную клетку в том же формате, в каком описание задано во входном файле (за исключением ограничений). Все числа, определяющие количество ходов в каком-либо направлении, должны быть ненулевыми. 2 Y -2 Z –2 var input,output: text; i,n:integer; x,y,z: longint; c:char; q:longint; function min(a,b:longint):longint; begin if a<b then min:=a else min:=b; end; function nonzero(q:longint):longint; begin if q=0 then nonzero:=0 else nonzero:=1; end; begin assign(input,'is1131.in'); assign(output,'is1131.out'); reset(input); rewrite(output); readln(input,n); x:=0; y:=0; z:=0; for i:=1 to n do begin read(input,c); readln(input,q); if c='X' then x:=x+q; if c='Y' then begin x:=x+q; z:=z+q; end; if c='Z' then z:=z+q; end; if (x>0) and (z>0) then y:=min(x,z); if (x<0) and (z<0) then y:=-min(-x,-z); x:=x-y; z:=z-y; writeln(output,nonzero(x)+nonzero(y)+nonzero(z)); if x<>0 then writeln(output,'X ',-x); if y<>0 then writeln(output,'Y ',-y); if z<>0 then writeln(output,'Z ',-z); close(input); close(output); end. |
if (x>0) and (z>0) then y:=min(x,z);
if (x<0) and (z<0) then y:=-min(-x,-z); x:=x-y; z:=z-y; writeln(output,nonzero(x)+nonzero(y)+nonzero(z)); вот эта часть непонятна |
и почему с минусом выводим координаты??
|
Пожалуйста, помогите...!!!
|
Ну прошу очень(((((
|
я так понимаю у вас тут 3х мерная система координат?
|
да, Y выражается через Z и X
|
Ну так есть идеи???
|
Срочно нужна помощь, плиииз
|
Часовой пояс GMT +4, время: 04:54. |
Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.