[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Арифметическая задача на PHP
Barh
Здравствуйте, Форумчане!

Кто отважится вспомнить школьную арифметику и поможет мне решить задачу?
Уже потратил много времени, но решение не приходит..

Условия задачи:

Числа: 1, 2, 4, 9
Действий: $history
Сумма: $sum

Количество действий ($history) и сумма($sum) всегда известны, но они выпадают случайным образом.

Необходимо получить количество чисел равное количеству действий ($history), но так чтобы они были === сумме ($sum)

Возможный вариант событий:


$numbers = array (1, 2, 4, 9);
$history = 3;
$sum =10;


Должен вернуться ответ в котором значится:
4 = 2шт.
2 = 1шт.

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

Уже сломал себе голову, да, задача странная. Но может быть кто-то поможет её решить? Я не думаю, что это очень сложно. Всё это будет решаться где-то в пару строк кода, но вот придумать их никак не могу.







Спустя 30 минут, 56 секунд (30.08.2012 - 16:06) pak написал(а):
что та я саму задачка не могу понять)

Спустя 28 минут, 54 секунды (30.08.2012 - 16:35) dron4ik написал(а):
как я понял все кратно двум?

Спустя 1 час, 7 минут, 49 секунд (30.08.2012 - 17:43) Barh написал(а):
pak, Опишу задачу еще раз)

Имеем числа: 1, 2, 4, 9
(т.е это 4 числа, которые могут использоваться)

Имеем количество действий(шагов): 3
(т.е. это то сколько раз мы должны взять любое число из набора 1, 2, 4, 9 )

И сумма: 10
сумма всех шагов с выбранным числом, покажу на примере:

Шаг (1 из 3)
Сумма 10. Вычитаем из нее число 2. Получилось 8.
10 - 2 = 8.
Использовали 1 раз число 2.

Шаг (2 из 3)
Сумма 8 (получена из шага 1). Вычитаем из нее число 4. Получилось 4.
8 - 4 = 4.
Использовали 1 раз число 4.

Шаг (3 из 3)
Сумма 4 (получена из шага 2). Вычитаем из нее число 4. Получилось 0.
4 - 4 = 0.
Использовали второй раз число 2.

Получаем результат для данной задачи:
Необходимо использовать число два - один раз, число четыре - 2 раза.

Допустим, если никаким образом получить результат (без остатка) нельзя то выводим FALSE.

Думаю теперь понятнее?))


dron4ik, нет, есть числа 1, 2, 4, 9.
9 и 1 не кратны двум.

Спустя 17 часов, 11 минут, 27 секунд (31.08.2012 - 10:54) dron4ik написал(а):
Barh


Блин, я тупой... не могу понять что нужно)))

А можно пример с числами 1, 2 , 9?

Спустя 1 час, 23 минуты, 35 секунд (31.08.2012 - 12:18) Placido написал(а):
$out = array();//здесь будет результат
$sum = 10;//требуемая сумма
$numbers = array(1,2,4,9);//числа
$digits = count($numbers);//количество чисел
$digits_used = 3;//сколько из них должно быть использовано
$array = range(0, pow($digits, $digits_used) - 1, 1);//массив от 0 до количества размещений с повторениями из $digits по $digits_used
array_walk($array, function($val,$key) use(&$array, $numbers){
$array[$key] = strtr(str_pad(base_convert($val, 10, 4), 3, '0', STR_PAD_LEFT), $numbers);
});
foreach($array as $num_string) {
if ($sum === array_sum(str_split($num_string))) {
$out[] = $num_string;
}
}

print_r($out);//244, 424, 442


Если никаким образом получить результат (без остатка) нельзя, то $out будет пуст.

Спустя 2 часа, 14 минут, 59 секунд (31.08.2012 - 14:33) Игорь_Vasinsky написал(а):
скоро ещё одно казино откроется походу.

Спустя 38 минут, 19 секунд (31.08.2012 - 15:11) Placido написал(а):
Цитата (Игорь_Vasinsky @ 31.08.2012 - 15:33)
скоро ещё одно казино откроется походу.

А мне почему-то думается, что это реализация своего рода капчи. То есть юзер должен ввести три числа из набора, которые в сумме давали бы указанное число. Скажем, показываем число 7, а юзер должен ввести 4+2+1, 3+3+1 либо 3+2+2. После этого проверяем, правильный ли набор цифр.

Спустя 4 часа, 29 минут, 57 секунд (31.08.2012 - 19:41) Игорь_Vasinsky написал(а):
слишком сложно.
был же конкурс на оптимальную защиту - там была капча с перетаскиванием элементов на их место (контур) - вот это оригинально)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.