Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 27.02.2017, 02:08   #1 (permalink)
avatar76
Новичок
 
Регистрация: 27.02.2017
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Помогите расшифровать ребус

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

КОТ+КОТ+КОТ+КОТ=УСЫ

Что бы получилось аналогично как в этом примере: (шлак+шлак+шлак=блок)

PHP код:
 CONST D=10;
  
TYPE CIPFER=0..9;
  VAR 
A,P2,P4,PR,O,L,L1,S,FLAGCIPFER;
      
K,P1,P3,B,SLAK,BLOKINTEGER;
BEGIN
 K
:=0FLAG:=0;
 
REPEAT
  PR
:=K*3 DIV D;
  FOR 
A:=0 TO 9 DO
   IF 
A<>K THEN
    BEGIN
     P1
:=A*3+PRP2:=P1 DIV DO:=P1 MOD D;
     IF(
O<>A) AND (O<>KTHEN
       
FOR L:=0 TO 9 DO
        IF (
L<>O) AND (L<>A) AND (L<>KTHEN
         BEGIN
          P3
:=L*3+P2P4:=P3 DIV DL1:=P3 MOD D;
          IF 
L1=L THEN
           
FOR S:=1 TO 3 DO
            IF (
S<>L) AND (S<>A) AND (S<>O) AND (S<>KTHEN
             BEGIN
              B
:=S*3+P4;
              IF(
B<D)AND(B<>L)AND(B<>A)AND(B<>O)AND(B<>KTHEN
                BEGIN SLAK
:=S*1000+L*100+A*D+K;
                      
BLOK:=B*1000+L*100+O*D+K;
                      
WRITE (SLAK:5,'*3=',BLOK:5,'  ');
                      
INC(FLAG);
                      IF 
FLAG>3 THEN
                       BEGIN WRITELN
FLAG:=0
                       END
;
                
END;
             
END;
     
END;
    
END;
    
K:=K+5
 UNTIL K
>5
END

avatar76 вне форума   Ответить с цитированием

Старый 27.02.2017, 02:08
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Информативные ответы вы можете найти в схожих обсуждениях

Помогите расшифровать код
Помогите расшифровать ошибки
Помогите расшифровать CBS.log
Помогите расшифровать

Старый 27.02.2017, 12:08   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от avatar76 Посмотреть сообщение
Расшифровать ребус, полученный в результате замены одинаковых букв одинаковыми цифрами. Найти также такие значения цифр, при которых сумма цифр в результате окажется наибольшей КОТ+КОТ+КОТ+КОТ=УСЫ Что бы получилось аналогично как в этом примере: (шлак+шлак+шлак=блок)
Знаете... разбираться в чужой программе ине, извините, лень, проще свою накатать, что я и сделал.
Несколько пояснений.
Поскольку вариантов расшифровки оказалось много (аж 27 штук), я поставил вывод в файл, а не на экран. Имя файла и путь, естественно, поправьте по своему усмотрению.
Булева функция St1 проверяет, что все цифры в трехзначном числе - разные.
Булева функция St2 проверяет, что в слагаемом и сумме нет одинаковых цифр.
Эти функции нужны потому, что в словах "КОТ" и "УСЫ" нет как повторяющихся букв внутри них, так и между собой.
Функция Sum считает сумму цифр в результате.
Код:
Var
 kot,usi,R:Array[1..100] of Integer;
 i,j,k,Rmax:Integer;
 f:text;

Function St1(n:Integer):boolean;
var S:String;
begin
 Str(n,S);
 St1:=(S[1]<>S[2]) and (S[1]<>S[3]) and (S[2]<>S[3]);
end;

Function St2(n,m:Integer):boolean;
var
 Sn,Sm:String;
 p,q:byte;
 b:boolean;
begin
 Str(n,Sn);
 Str(m,Sm);
 b:=true;
 for p:=1 to 3 do
  for q:=1 to 3 do
   if Sn[p]=Sm[q] then b:=false;
 St2:=b;
end;

Function Sum(n:Integer):Byte;
var
 m:Integer;
 Smm:byte;
begin
 m:=n;
 Smm:=m mod 10;
 m:=m div 10;
 Smm:=Smm+(m mod 10)+(m div 10);
 Sum:=Smm;
end;

Begin
 Assign(f,'D:\kot_usi.txt');
 Rewrite(f);
 Rmax:=0;
 j:=0;
 for i:=400 to 999 do
  if ((i mod 4)=0) then
   begin
    k:=i div 4;
    if St1(k) and St1(i) and St2(k,i) then
     begin
      j:=j+1;
      usi[j]:=i;
      kot[j]:=k;
      R[j]:=Sum(usi[j]);
      if R[j]>Rmax then Rmax:=R[j];
      writeln(f,j:2,')  ',kot[j],' + ',kot[j],' + ',kot[j],' + ',kot[j],' = ',usi[j], '   Sum = ',R[j]);
     end;
   end;
 Writeln(f);
 Writeln(f,'With maximal sum:');
 for i:=1 to j do
  if R[i]=Rmax then
   writeln(f,'     ',kot[i],' + ',kot[i],' + ',kot[i],' + ',kot[i],' = ',usi[i], '   Sum = ',R[i]);
 Close(f);
End.
Vladimir_S вне форума   Ответить с цитированием
Старый 27.02.2017, 20:49   #3 (permalink)
avatar76
Новичок
 
Регистрация: 27.02.2017
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Не могли бы вы помочь, если не сложно, составить именно так как в примере, что бы получилось аналогичное решение, очень нужно
avatar76 вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 10:38.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.