Помощь - Поиск - Пользователи - Календарь
Полная версия: Помогите решить/разобраться с задачей.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Casual
Решить арифметический ребус КИОТИО=ТОКИО. Вместо каждой буквы необходимо поставить некоторую цифру, причём одинаковые буквы означают одинаковые цифры, а различные буквы-различные цифры.
Casual
Сложно новичку в этом разобраться... Подкиньте идей. В чем смысл задачи? Что должно получится в конце?

Добавлено через 4 мин.
В условии задачи написано КИО*ИО=ТОКИО. Вот думаю, может опечатка? Может правильно должно быть КИОТИО=ТОКИО?
volvo
Цитата
В условии задачи написано КИО*ИО=ТОКИО. Вот думаю, может опечатка?
Никакая не опечатка, нормальный ребус, решаемый...

Цитата
Что должно получится в конце?
Правильное математически выражение, в котором разные буквы заменены разными цифрами, а одинаковые - одинаковыми... Конкретно в твоем случае получается:
625*25=15625

Я ж привел тебе ссылки с примерами решенных ребусов. Посмотри, что и как там делается, что именно непонятно? В чем сложность?

Вот тут еще глянь: Ребусы
Там приведен еще один способ решения ребусов...
Casual
Мой ребус также решается, как в тех задачах? Так я не видел чтобы говорилось, что разные буквы-разные цифры, а одинаковые буквы-одинаковые цифры.

Добавлено через 3 мин.
В смысле тех задачах не видел.
volvo
Цитата
Так я не видел чтобы говорилось, что разные буквы-разные цифры, а одинаковые буквы-одинаковые цифры.
Это подразумевается самим понятием "ребус"... Кстати:
Цитата(Amro @ 28.12.2003 20:53) *
дело состоит в том что каждой букве соответствует своя цифра, каждая буква представляется в виде одной единственной цифры...
- это по-твоему что значит?

Цитата
Мой ребус также решается, как в тех задачах?
Абсолютно, только в вышеприведенных ребусах находится СУММА двух выражений, тебе надо найти их ПРОИЗВЕДЕНИЕ. Вот и вся разница.
Casual
Вот писал программу по тем ребусам, которые вы выложили, и... запутался! Начало и конец вроде правильные, а середину не понял.

Program Rebus;
uses crt;
var
k, i, o, t: 0..9;
dig : set of 0..9;
tokio: longint;
sum,g,w : longint;
begin
clrscr;
for k:=0 to 9 do begin
include(dig,k);
for i:=0 to 9 do
if not (i in dig) then begin
include(dig,i);
for o:=0 to 9 do
if not (o in dig) then begin
include(dig,o);
for t:=0 to 9 do
if not (t in dig) then begin
include(dig,t);
g:=100; w:=100;
sum:=k*1000*g+(i+k)*100*w+(r+o)*1000+(b+b)*100+(o+i)*10+s+k;
tokio:=t*100000+o*10000+k*1000+k*100+o*10;
if (sum=sobaki) then writeln('kio*io=tokio: ',k,i,o,'*',i,o,'=,t,o,k,i,o);
exclude(dig,k);
end;
exclude(dig,i);
end;
exclude(dig,o);
end;
exclude(dig,t);
end;
readln;
end.



Вот это место не понятно:

sum:=k*1000*g+(i+k)*100*w+(r+o)*1000+(b+b)*100+(o+i)*10+s+k;
tokio:=t*100000+o*10000+k*1000+k*100+o*10;
if (sum=tokio) then writeln('kio*io=tokio: ',k,i,o,'*',i,o,'=,t,o,k,i,o);

как оно будет выглядеть правильно? и что оно вообще значит?
P.S. никогда не решал задачи с буквами.
volvo
Я ж говорил: не сумму считать надо, а произведение:

    mult := (100*k + 10*i + o) * (10*i + o);
tokio := t*10000+o*1000+k*100+i*10+o;
if mult = tokio then
writeln(':', k,i,o,'*',i,o,'=', t,o,k,i,o);
Casual
Вот, что получилось в итоге:

Program Rebus;
uses crt;
var
k, i, o, t: 0..9;
dig : set of 0..9;
tokio: longint;
mult,g,w : longint;
begin
clrscr;
for k:=0 to 9 do begin
include(dig,k);
for i:=0 to 9 do
if not (i in dig) then begin
include(dig,i);
for o:=0 to 9 do
if not (o in dig) then begin
include(dig,o);
for t:=0 to 9 do
if not (t in dig) then begin
include(dig,t);
g:=100; w:=100;
mult:= (100*k + 10*i + o) * (10*i + o);
tokio:= t*10000+o*1000+k*100+i*10+o;
if mult = tokio then
writeln(':', k,i,o,'*',i,o,'=', t,o,k,i,o);
exclude(dig,k);
end;
exclude(dig,i);
end;
exclude(dig,o);
end;
exclude(dig,t);
end;
readln;
end.


и она не работает!
Просто пустой черный экран.
volvo
Цитата
и она не работает!
Естественно... Во-первых, переменные G и W можно вообще убрать - они не нужны... А во-вторых, посмотри внимательно, по тем ссылкам, которые я привел: извлечение из множеств происходит в ОБРАТНОМ порядке... То есть, если у тебя

include(dig,k);
...
include(dig,i);
...
include(dig,o);
...
include(dig,t);
, то извлекать-то надо вот так:
      exclude(dig,t); { это самый внутренний цикл }
...
exclude(dig,o);
...
exclude(dig,i);
...
exclude(dig,k); { это - самый внешний цикл }

А у тебя что творится?
Casual
Спасибо большое тебе! Все работает! Что твое dig, include(dig,t) и exclude(dig,i) в программе?


Добавлено через 4 мин.
Опечатка! Что такое dig, include(dig,t) и exclude(dig,i) в программе?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.