IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Задача о кубике, Перемещение игральной кости
LammerzAttack
сообщение 10.03.2005 21:18
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Мужской

Репутация: -  0  +


Вот такая интересная задача:
Имя входного файла: dice.in
Имя выходного файла: dice.out
Количество тестов: 15
Ограничение по памяти: 1 Мб
Ограничение по времени: 1 с

На клетчатом поле размером MxN в левом нижнем углу лежит игральная кость. За один ход ее можно перекатить на клетку вправо или вверх. Стоимостью пути называется сумма чисел на верхней грани кубика во всех клетках пути. Найдите минимальную стоимость пути в правый верхний угол.

Формат входного файла
В первой строке два натуральных числа N и M <= 1000 — размеры доски. Во второй строке три числа от 1 до 6 — числа на верхней, левой и передней грани кубика соответственно (сумма чисел на противоположных гранях кубика равна 7).

Формат выходного файла
Одно натуральное число — минимальная стоимость искомого пути.

Пример
dice.in
5 5
1 4 5

dice.out
29

Помогите с решением.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
virt
сообщение 15.03.2005 7:07
Сообщение #2


Знаток
****

Группа: Пользователи
Сообщений: 419
Пол: Мужской

Репутация: -  6  +


ну а сам то подумай как sled реализовать ,определи например несколько состояний ,так что при переходе состояния однозначно меняются. Каждое состояние показавает какая цифра наверху ,и какая будет далешь ,и т.д.

ответ хранится в a[1,m] ::
Код
writeln(a[1,m]);


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
madrabbit
сообщение 18.03.2005 15:07
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 14
Пол: Мужской

Репутация: -  0  +


вот я написал пограммку.
вроде работает, нО(!):
чтение не из файла(не умею), и напиано при помощи рекурсии(только это и умею), ну и короче посмотри, может алгоритм поможет чем-нибудь...
Код

Program Dice;
uses crt;
type
   line=array[1..300] of shortint;
   matrix=array[1..6] of shortint;
var
       NN,MM,limit,k:integer;
       mass:matrix;
       lin:line;
procedure dices(masss:matrix;direct:char;n,m,turn:integer;way:line);

begin
if (n>NN) or (m>MM) or (turn>=limit) then exit
         else
            if n+m=NN+MM then begin
                                writeln('gotcha');
                                limit:=turn;  {на данный момент наименьшая сумма  верхних граней}
                                writeln(turn);
                                for k:=1 to n+m do
                                write(way[k],' ');
                                readln;
                                exit
                              end;

            if direct='r' then {так кубик вращается вправо}
                 begin
                 k:=masss[5];
                 masss[5]:=masss[4];
                 masss[4]:=masss[3];
                 masss[3]:=masss[2];
                 masss[2]:=k;
                 n:=n+1        {позиция кубика по горизонтали}
                 end
            else
            if direct='u' then {так кубик вращается вверх}
               begin
               k:=masss[6];
               masss[6]:=masss[2];
               masss[2]:=masss[1];
               masss[1]:=masss[4];
               masss[4]:=k;
               m:=m+1         {позиция кубика по вертикали}
               end;
                       way[n+m]:=masss[2]; {промежуточный путь кубика в виде массива значений верхних  граней}



                       dices(masss,'u',n,m,turn+masss[2],way);
                       dices(masss,'r',n,m,turn+masss[2],way);
end;


BEGIN
clrscr;
writeln('ўўҐ¤ЁвҐ N');
readln(NN);
writeln('ўўҐ¤ЁвҐ M');
readln(MM);
limit:=(NN+MM)*5; {типа первый предел суммы, от фоная}
for k:=1 to 200 do
   lin[k]:=0;           {массив ходов}
writeln('ўўҐ¤ЁвҐ front');
readln(mass[1]);     {это сам кубик}
writeln('ўўҐ¤ЁвҐ up');
readln(mass[2]);     {это сам кубик}
writeln('ўўҐ¤ЁвҐ right');
readln(mass[3]);     {это сам кубик}
mass[4]:=7-mass[2]; {это сам кубик}
mass[5]:=7-mass[3];  {это сам кубик}
mass[6]:=7-mass[1];   {это сам кубик}
dices(mass,'0',0,0,0,lin);
writeln('Done!');
readln
END
.


очень буду рад предложения по поводу того, как реализовать мою программу(если такое возможно) с требуемыми условиями задачи...
спасибо.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 23:02
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"