Ребус (Дома*5=Улицы) - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Расшифровать ребус, полученный в результате замены одинаковых букв одинаковыми цифрами. Найти также такие значения цифр, при которых сумма цифр в результате окажется наибольшей. ДОМА+ДОМА+ДОМА+ДОМА+ДОМА=УЛИЦЫ. Пример (блок*4=стена)
Листинг программы
  1. const d=10;
  2. var b,l,o,k,s,t,e,n,a,p1,p2,p3,p4,p5,pr,blok:integer;
  3. stena:longint;
  4. begin
  5. for k:=1 to 9 do
  6. if (k<>5)and(k<>0)
  7. then
  8. begin
  9. pr:=k*7 div d;
  10. a:=k*7 mod d;
  11. for o:=0 to 9 do
  12. if (o<>a)and(o<>k) then
  13. begin
  14. p1:=o*7+pr;
  15. p2:=p1 div d;
  16. n:=p1 mod d;
  17. if (n<>o)and(n<>a)and(n<>k) then
  18. for l:=0 to 9 do
  19. if (l<>n)and(l<>o)and(l<>k)and(l<>a) then
  20. begin
  21. p3:=l*7+p2;
  22. p4:=p3 div d;
  23. e:=p3 mod d;
  24. if (e<>l)and(e<>o)and(e<>n)and(e<>k)and(e<>a) then
  25. for b:=1 to 9 do
  26. if (b<>e)and(b<>l)and(b<>o)and(b<>n)and(b<>k)and(b<>a) then
  27. begin
  28. p5:=b*7+p4;
  29. s:=p5 div d;
  30. t:=p5 mod d;
  31. if (t<>b)and(t<>l)and(t<>e)and(t<>o)and(t<>k)and(t<>a)and(t<>n)and(s<>t)and(s<>e)and(s<>n)and(s<>a)and(s<>b)and(s<>l)and(s<>o)and(s<>k)and(s<7) then
  32. begin
  33. blok:=b*1000+l*100+o*d+k;
  34. stena:=s*10000+t*1000+e*100+n*d+a;
  35. writeln(blok,'*7=',stena);
  36. end;
  37. end;
  38. end;
  39. end;
  40. end;
  41. readln;
  42. end.

Решение задачи: «Ребус (Дома*5=Улицы)»

textual
Листинг программы
  1. var d, o, m, a, i, j: byte;
  2.     ul, max, t, x, s: integer;
  3.     p: set of byte;
  4.     arr: array [1..60] of integer;
  5. begin
  6.   max := 0;
  7.   i := 0;
  8.   j := 1;
  9.   for d := 2 to 9 do
  10.     for o := 0 to 9 do
  11.       begin
  12.         if d = o then continue;
  13.         for m := 0 to 9 do
  14.           begin
  15.             if (d = m) or (o = m) then continue;
  16.             for a := 0 to 9 do
  17.               begin
  18.                 if (d = a) or (o = a) or (m = a) then continue;
  19.                 x := 1000 * d + 100 * o + 10 * m + a;
  20.                 ul := 5 * x;
  21.                 s := 0;
  22.                 p := [];
  23.                 while ul > 0 do
  24.                   begin
  25.                     t := ul mod 10;
  26.                     if (t in p) or (d = t) or (o = t) or (m = t) or (a = t) then break;
  27.                     s := s + t;
  28.                     p := p + [t];
  29.                     ul := ul div 10
  30.                   end;
  31.                 if ul > 0 then continue;
  32.                 write(x, '*5=', 5 * x, ' ');
  33.                 inc(i);
  34.                 if i > 5
  35.                   then begin
  36.                     i := 0;
  37.                     writeln
  38.                   end;
  39.                 if s = max
  40.                   then begin
  41.                     inc(j);
  42.                     arr[j] := x;
  43.                   end
  44.                   else if s > max
  45.                     then begin
  46.                       j := 1;
  47.                       arr[1] := x;
  48.                       max := s
  49.                     end
  50.               end
  51.           end
  52.       end;
  53.   writeln;
  54.   writeln('The maximum sum of digits of result = ', max, ' in the following sets:');
  55.   for i := 1 to j do writeln(arr[i], '*5=', arr[i] * 5);
  56.   readln
  57. end.

Объяснение кода листинга программы

  1. Переменные d, o, m, a, i, j, ul, max, t, x, s, p, arr - это переменные для выполнения задачи.
  2. Переменная max инициализируется значением 0.
  3. Переменная i инициализируется значением 0.
  4. Переменная j инициализируется значением 1.
  5. Два вложенных цикла for выполняются для перебора всех возможных комбинаций чисел от 2 до 9 для переменной d.
  6. Внутри первого вложенного цикла for перебираются все возможные значения переменной o от 0 до 9.
  7. Внутри второго вложенного цикла for перебираются все возможные значения переменной a от 0 до 9.
  8. Значение переменной x вычисляется как 1000 d + 100 o + 10 * m + a.
  9. Значение переменной ul вычисляется как 5 * x.
  10. Значение переменной s инициализируется значением 0.
  11. Значение переменной p инициализируется как пустое множество.
  12. Цикл while выполняется до тех пор, пока значение переменной ul больше 0.
  13. Внутри цикла while проверяется, является ли текущее значение переменной t (остаток от деления ul на 10) уже присутствующим в множестве p или равным одному из чисел d, o, m, a. Если это так, то цикл прерывается.
  14. Значение переменной s увеличивается на значение переменной t, а затем значение переменной t добавляется в множество p.
  15. Значение переменной ul уменьшается на 10 (делитель на 10).
  16. Если значение переменной ul все еще больше 0, то цикл продолжается.
  17. Если значение переменной ul становится равным 0, то текущий результат (x) не подходит, и цикл продолжается.
  18. Если значение переменной ul становится равным 0, и значение переменной s равно максимальному значению max, то текущий результат (x) подходит, и его значение добавляется в массив arr.
  19. Если значение переменной ul становится равным 0, и значение переменной s больше максимального значения max, то текущий результат (x) подходит, и его значение добавляется в начало массива arr.
  20. Значение переменной max обновляется новым максимальным значением s.
  21. Значение переменной j обновляется на 1, чтобы перейти к следующей итерации цикла for для перебора следующего значения переменной d.
  22. Значение переменной i обновляется на 0, чтобы перейти к следующей итерации цикла for для перебора следующего значения переменной d.
  23. Значение переменной ul обновляется на 5 * новое значение переменной d.
  24. В конце программы выводится максимальное значение max и все возможные комбинации чисел, которые его достигают.
  25. Программа завершается после чтения значения из стандартного ввода.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут