Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/25: Рейтинг темы: голосов - 25, средняя оценка - 4.68
 Аватар для Boroda76
0 / 0 / 0
Регистрация: 18.04.2017
Сообщений: 30

Циклы, перебор, ребус: "ЛИСА+ВОЛК=ЗВЕРИ"

25.04.2017, 11:43. Показов 5017. Ответов 7

Студворк — интернет-сервис помощи студентам
Добрый день, товарисчи!
Есть задача: "Решите числовой ребус ЛИСА + ВОЛК = ЗВЕРИ. Каждая буква соответствует своей цифре, причем различным буквам соответствуют различные цифры."
Думал как бы это реализовать красиво, с рекурсиями всякими, но, в итоге, решил для начала перебором решить. Склепал вот это:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
 
for($l=1;$l<=9;$l++) {
$L=$l;
  for($i=0;$i<=9;$i++) {
  $I=$i;
    for($s=0;$s<=9;$s++) {
    $S=$s;
      for($a=0;$a<=9;$a++) {
      $A=$a;
        for($v=1;$v<=9;$v++) {
        $V=$v;
          for($o=0;$o<=9;$o++) {
          $O=$o;
            for($k=0;$k<=9;$k++) {
            $K=$k;
              for($e=0;$e<=9;$e++) {
              $E=$e;
                for($r=0;$r<=9;$r++) {
                $R=$r;
                if(($L*1000+$I*100+$S*10+$A)+($V*1000+$O*100+$L*10+$K)==10000+$V*1000+$E*100+$R*10+$I) 
                {$rebus=$L.$I.$S.$A."+".$V.$O.$L.$K."=".$Z.$V.$E.$R.$I;
                echo "Ответ: $rebus";
                }
}
}
}
}
}
}
}
}
}
echo "<p><a href=\"../\">Назад</a>";
?>
Страница вызова скрипта (на всякий случай):
HTML5
1
2
3
4
5
<html><body>
<h1>Решите ребус: ЛИСА+ВОЛК=ЗВЕРИ</h1>
<form action="./handler/action.php"><input type="submit" value="Решить"></form><br>
<a href="../">Назад</a>
</body></html>
В итоге, при нажатии на кнопку, ничего не происходит, а спустя 2 минуты открывается .../action.php с пустой страницей.
В error log такое:
[Tue Apr 25 11:35:30.378336 2017] [php7:error] [pid 4732:tid 1128] [client 127.0.0.1:50592] PHP Fatal error: Maximum execution time of 120 seconds exceeded in D:\\Bitnami\\wampstack-7.1.2-0\\apache2\\htdocs\\case\\topik2\\cycles \\case4\\handler\\action.php on line 19, referer: http://127.0.0.1/case/topik2/cycles/case4/

Где-то накосячил, не пойму никак где... В чем причина? (сильно не пинайте)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.04.2017, 11:43
Ответы с готовыми решениями:

Задача на числовой ребус: "лиса+волк=звери"
Здравствуйте, дорогие форумчане! Я решаю вот эту задачу - 4-ая отсюда -...

Создать программный код, использую разные циклы (Циклы: for, While (Do-While)
Напечатать &quot;столбиком&quot; третьи степени всех целых чисел от a до 50 (значение a присваивается через...

Перебор элементов массива без использования циклов
Здравствуйте, изучал эту тему, наткнулся на код function f_print($value, $key) { echo $key . '...

7
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
25.04.2017, 11:58
Цитата Сообщение от Boroda76 Посмотреть сообщение
Где-то накосячил, не пойму никак где
В смысле не поймете? Вы же сами написали текст ошибки.
Цитата Сообщение от Boroda76 Посмотреть сообщение
PHP Fatal error: Maximum execution time of 120 seconds exceeded
Увеличивайте execution time.

Цитата Сообщение от Boroda76 Посмотреть сообщение
$L=$l;
Зачем? Можно напрямую использовать $l, в остальных циклах аналогично.

Также у вас не хватает части кода для обработки буквы "З".
1
 Аватар для Boroda76
0 / 0 / 0
Регистрация: 18.04.2017
Сообщений: 30
25.04.2017, 12:04  [ТС]
Добавил в начало set_time_limit(300) - думаю хватит?

Да, здесь согласен, но это взято из изначальной пробы пера, где подразумевался другой алгоритм (влом было равенство переписывать)
Заметил еще одну ошибку — проверку значений на уникальность (не должны быть равны), добавил в текущий тест - ждем результата с 300сек.

Буква "З", очевидно, равна 1, поэтому заменена на 10000.
0
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
25.04.2017, 12:12
Лучший ответ Сообщение было отмечено Boroda76 как решение

Решение

Цитата Сообщение от Boroda76 Посмотреть сообщение
Добавил в начало set_time_limit(300) - думаю хватит?
Хзхз, перебор 10-символов может быть очень долгим, вы хотя бы допишите exit() когда решение найдено.
Цитата Сообщение от Boroda76 Посмотреть сообщение
Буква "З", очевидно, равна 1, поэтому заменена на 10000.
В таком случае вместо неизвестной $Z тоже можно подставить 1.
1
 Аватар для Boroda76
0 / 0 / 0
Регистрация: 18.04.2017
Сообщений: 30
25.04.2017, 12:19  [ТС]
Спасибо Вам за помощь! +К

Цитата Сообщение от tarasalk Посмотреть сообщение
Хзхз, перебор 10-символов может быть очень долгим, вы хотя бы допишите exit() когда решение найдено.
Воистину, добавил exit, стало легче К слову, 300 хватило на полный перебор, ответ был ужасающим (не все условия учел, поэтому их было несколько сотен точно, если не тысяч)

Цитата Сообщение от tarasalk Посмотреть сообщение
В таком случае вместо неизвестной $Z тоже можно подставить 1.
Исправлено, спс
0
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
25.04.2017, 12:19
И раз уж буква "З" = 1, то в переборе остальных букв можно пропустить 1
0
 Аватар для Boroda76
0 / 0 / 0
Регистрация: 18.04.2017
Сообщений: 30
25.04.2017, 14:03  [ТС]
Вот прям сейчас до этого допер, а Вы уже пишите Заодно и перебор В и Л можно начинать с 2.

Добавлено через 58 минут
Привел код в порядок, ответ совсем не сходится, где ошибка?
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
set_time_limit(300);
for($l=2;$l<=9;$l++) {
  for($i=0;$i<=9;$i++) {
  if(($i==1)||($i==$l)) $i++;
    for($s=0, $s!=1;$s<=9;$s++) {
    if(($s==1)||($s==$l)||($s==$i)) $s++;
      for($a=0, $a!=1;$a<=9;$a++) {
      if(($a==1)||($a==$s)||($a==$l)||($a==$i)) $a++;
        for($v=2;$v<=9;$v++) {
        if(($v==$a)||($v==$s)||($v==$i)||($v==$l)) $v++;
          for($o=0;$o<=9;$o++) {
          if(($o==1)||($o==$v)||($o==$a)||($o==$s)||($o==$i)||($o==$l)) $o++;
            for($k=0;$k<=9;$k++) {
            if(($k==1)||($k==$o)||($k==$v)||($k==$a)||($k==$s)||($k==$i)||($k==$l)) $k++;
              for($e=0;$e<=9;$e++) {
              if(($e==1)||($e==$l)||($e==$i)||($e==$s)||($e==$a)||($e==$v)||($e==$o)||($e==$k)) $e++;
                for($r=0;$r<=9;$r++) {
                if(($r==1)||($r==$l)||($r==$i)||($r==$s)||($r==$a)||($r==$v)||($r==$o)||($r==$k)||($r==$e)) $r++;
                if($l*1000+$i*100+$s*10+$a+$v*1000+$o*100+$l*10+$k==10000+$v*1000+$e*100+$r*10+$i)
                {$rebus=$l.$i.$s.$a."+".$v.$o.$l.$k."=1".$v.$e.$r.$i;
                echo "Ответ: $rebus; ";
                }
}
}
}
}
}
}
}
}
}
echo "<p><a href=\"../\">Назад</a>";
?>
Добавлено через 24 минуты
Кому интересно, полный код решения перебором (уверен, что многие занимаются по тому же задачнику), когда-нибудь решу для любых входных:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
set_time_limit(300);
for($l=2;$l<=9;$l++) {
  for($i=0;$i<=9;$i++) {
  if(($i==1)||($i==$l)) $i++;
    for($s=0;$s<=9;$s++) {
    if(($s==1)||($s==$l)||($s==$i)) $s++;
      for($a=0;$a<=9;$a++) {
      if(($a==1)||($a==$s)||($a==$l)||($a==$i)) $a++;
        for($v=2;$v<=9;$v++) {
        if(($v==$a)||($v==$s)||($v==$i)||($v==$l)) $v++;
          for($o=0;$o<=9;$o++) {
          if(($o==1)||($o==$v)||($o==$a)||($o==$s)||($o==$i)||($o==$l)) $o++;
            for($k=0;$k<=9;$k++) {
            if(($k==1)||($k==$o)||($k==$v)||($k==$a)||($k==$s)||($k==$i)||($k==$l)) $k++;
              for($e=0;$e<=9;$e++) {
              if(($e==1)||($e==$l)||($e==$i)||($e==$s)||($e==$a)||($e==$v)||($e==$o)||($e==$k)) $e++;
                for($r=0;$r<=9;$r++) {
                if(($r==1)||($r==$l)||($r==$i)||($r==$s)||($r==$a)||($r==$v)||($r==$o)||($r==$k)||($r==$e)) $r++;
                if(($l*1000+$i*100+$s*10+$a+$v*1000+$o*100+$l*10+$k==10000+$v*1000+$e*100+$r*10+$i)&&($v<10)&&($o<10)&&($l<10)&&($k<10)&&($i<10)&&($s<10)&&($a<10)&&($e<10)&&($r<10)&&(($i!=$l)&&($s!=$l)&&($s!=$i)&&($a!=$s)&&($a!=$l)&&($a!=$i)&&($v!=$a)&&($v!=$s)&&($v!=$i)&&($v!=$l)&&($o!=$v)&&($o!=$a)&&($o!=$s)&&($o!=$i)&&($o!=$l)&&($k!=$o)&&($k!=$v)&&($k!=$a)&&($k!=$s)&&($k!=$i)&&($k!=$l)&&($e!=$l)&&($e!=$i)&&($e!=$s)&&($e!=$a)&&($e!=$v)&&($e!=$o)&&($e!=$k)&&($r!=$l)&&($r!=$i)&&($r!=$s)&&($r!=$a)&&($r!=$v)&&($r!=$o)&&($r!=$k)&&($r!=$e)))
                {$rebus=$l.$i.$s.$a."+".$v.$o.$l.$k."=1".$v.$e.$r.$i;
                echo "Ответ: $rebus; ";
                }
}
}
}
}
}
}
}
}
}
echo "<p><a href=\"../\">Назад</a>";
?>
0
1137 / 685 / 412
Регистрация: 07.11.2015
Сообщений: 1,102
26.04.2017, 04:11
ЛИСА + ВОЛК = ЗВЕРИ
Значения для букв И, З, Е, Р можно найти в процессе сложения, так что для подбора остаются только 6 букв Л, С, А, В, О, К.
Нужен перебор всех размещений без повторений для чисел 0...9 по 6.
Это выходит 151200 возможных вариантов.
Генератор позаимствовал отсюда https://prog-cpp.ru/placement/.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<?php
header('Content-Type: text/plain');
 
// ЛИСА + ВОЛК = ЗВЕРИ
// подбор значений нужен только для букв Л, С, А, В, О, К
// значения для букв И, З, Е, Р можно найти в процессе сложения 
$keys = ['Л', 'С', 'А', 'В', 'О', 'К'];
 
$n = 10;
$m = count($keys);
 
$array = range(0, $n - 1);
 
do {
    check(array_combine($keys, array_slice($array, 0, $m)));
} while (NextSet($array, $n, $m));
 
 
 
function check($_) {
 
    // ЛИСА + ВОЛК = ЗВЕРИ
    // находим букву И 
    $i = ($_['А'] + $_['К']) % 10;
    
    // проверяем на повторы цифр
    if (in_array($i, $_)) return;
    $_['И'] = $i;
    
    $arg1 = "{$_['Л']}{$_['И']}{$_['С']}{$_['А']}";
    $arg2 = "{$_['В']}{$_['О']}{$_['Л']}{$_['К']}";
    $summ = (string) ( (int) $arg1 + (int) $arg2 );
    
    if (strlen($summ) == 5
        && $summ[1] == $_['В']
        && !in_array($summ[0], $_)     // З
        && !in_array($summ[2], $_)     // Е
        && !in_array($summ[3], $_)     // Р
    ) {
        echo "$arg1 + $arg2 = $summ \n";
    }
}
 
 
 
 
function swap(&$a, $i, $j) {
  $s = $a[$i];
  $a[$i] = $a[$j]; $a[$j] = $s;
}
 
function NextSet(&$a, $n, $m) {
 
  do { // повторяем пока не будет найдено следующее размещение
    $j = $n - 2;
 
    while ($j != -1 && $a[$j] >= $a[$j + 1]) $j--;
 
    if ($j == -1)
      return false; // больше размещений нет
 
    $k = $n - 1;
    while ($a[$j] >= $a[$k]) $k--;
    swap($a, $j, $k);
    $l = $j + 1; $r = $n - 1; // сортируем оставшуюся часть последовательности
    while ($l < $r)
      swap($a, $l++, $r--);
  } while ($j > $m - 1);
  return true;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.04.2017, 04:11
Помогаю со студенческими работами здесь

Циклический перебор многомерного массива
Есть вот такая функция - выводит меню if (!empty($is_intersected)) { $this-&gt;_menu .= '&lt;li...

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

Перебор двух массивов циклом while не работает
Помогите разобраться! Задача следующая, вытянуть из одной бд данные и записать их в индексированный...

Перебор в цикле строк из файла
Как найти в файле первое совпадение(&lt;datepost&gt;&lt;/datepost&gt;) и заменить на первую строку из файла,...

Перебор массива циклом
Добрый день. Столкнулся с такой проблемой как перебор массива циклом. Долгое время не могу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru