Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Задачка

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: ответ 36
valenok
Отправлено: 12 Июня, 2010 - 20:59:16
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




Задача следующая:

Нужно найти скриптом - двухзначное число(XY) у которого
результат умножения первой цифры(X) на вторую(Y) = половина самого числа (XY/2)
Ответ 36 так как 3*6 = 18 = половина от 36

Но мы то с вами ответ знаем, а скрипт ответ не знает.
Помогите скрипту найти ответ за наименьшее количество итераций.

for($i =0; $i < 100; $i++) = 100 итераций.
На данный момент меньше 8ми итераций у меня не получается.
А у вас?


-----
Truly yours, Sasha.
 
My status
 Top
qbik
Отправлено: 12 Июня, 2010 - 21:23:55
Post Id


Гость


Покинул форум
Сообщений всего: 114
Дата рег-ции: Июнь 2010  


Помог: 0 раз(а)




вроде за четыре можно
правда много письменной математики
вернее четыре для полной проверки

(Отредактировано автором: 12 Июня, 2010 - 21:25:57)

 
 Top
SAD
Отправлено: 12 Июня, 2010 - 21:57:30
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




код може индусский, но все продумано матетамитески
PHP:
скопировать код в буфер обмена
  1.  
  2. for($i=1;$i<10;$i++)
  3.   {
  4.     if($i%2==1)
  5.       $a=2;
  6.     else
  7.       $a=4;
  8.     for($j=$a;$j<9;$j+=4)
  9.       {
  10.         if(10*$i+$j==2*$i*$j)
  11.           {
  12.             echo $i.$j;
  13.             exit;
  14.           }
  15.         echo $i.$j."<br/>";
  16.       }  
  17.   }
  18.  

(Отредактировано автором: 12 Июня, 2010 - 22:06:38)

 
 Top
qbik
Отправлено: 12 Июня, 2010 - 22:18:20
Post Id


Гость


Покинул форум
Сообщений всего: 114
Дата рег-ции: Июнь 2010  


Помог: 0 раз(а)




сократил до двух итераций
Спойлер (Отобразить)
 
 Top
SAD
Отправлено: 12 Июня, 2010 - 22:22:24
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




Браво))
 
 Top
valenok
Отправлено: 12 Июня, 2010 - 23:16:45
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




qbik пишет:
ократил до двух итераций

Это ты на листике решил =) А решить должен скрипт.
Хотя при любом количестве итераций < 99 половину все таки решаем мы, а не скрипт,
зная какие числа следует пропускать.

(Отредактировано автором: 12 Июня, 2010 - 23:21:10)



-----
Truly yours, Sasha.
 
My status
 Top
qbik
Отправлено: 12 Июня, 2010 - 23:24:39
Post Id


Гость


Покинул форум
Сообщений всего: 114
Дата рег-ции: Июнь 2010  


Помог: 0 раз(а)




valenok
скрипт тоже мы пишем ;)

кстати ,а твои 8 итераций какие?
 
 Top
valenok
Отправлено: 12 Июня, 2010 - 23:27:49
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




Да, виноват, видимо не правильная постановка задачи.
У меня получилася вот такой код:
Как у Sad'a в другой записи.

Спойлер (Отобразить)

Число(36) делится на два, значит четное.
Значит вторая цифра в числе должна быть четной.
Перемножение любого числа на четное дает четное - половина нашего числа (36) тоже четная. Значит число(36) делится на 4.

Дальше пропускаем дублирование чисел
12 (21 пропустить)
13 (31 пропустить) и т.д.

Пропускаются также числа заканчивающиеся на 0 и чис

(Отредактировано автором: 12 Июня, 2010 - 23:35:36)



-----
Truly yours, Sasha.
 
My status
 Top
Champion Супермодератор
Отправлено: 13 Июня, 2010 - 08:29:14
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Такая же штука, как у qbik.
(10x + y) / (x*y) = 2; Делим обе части уравнения на 2 и умножаем на Х, получаем:
(10х + y) / y = 2x: Отсюда:
y = 5 + y/2x, Т.е Y > 5, т.е. 6,7,8,9. Мы знаем, что он четный, т.е. остаются 6 и 8...*

Из последнего уравнения выражаем Х через У:
y - 5 = y / 2x;
x = y / 2(y - 5);

Значит за 2 итерации можно по-любому найти число. Вот)
for (y = 6; y < 10; y += 2) {
x = y / 2(y - 5);
...
}
(Добавление)
Хотя тут еще видно, что чтобы Х был целым, У должен изменяться не += 2, а по более замысловатой формуле, которая до одной итерации сократит это дело.
Цифра 6 находится из формулы (*), 2 - это из условия (xy/(10x+y)), 5 - это 10/2, т.е. можно по идее найти так решение не только для xy/(10x+y)=2, но и для других чисел? кроме 2.
 
 Top
SAD
Отправлено: 13 Июня, 2010 - 11:52:26
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




короче говоря, тут программированием и не пахнет то - простая математика и рассуждения.
 
 Top
Champion Супермодератор
Отправлено: 13 Июня, 2010 - 11:54:04
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




SAD, а прежде, чем кодить, порассуждать никогда не помешает)
 
 Top
SAD
Отправлено: 13 Июня, 2010 - 11:56:10
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




Я же не спорю, сначала нужно продумать все, построить логику действий - а закодировать, то уже не проблема.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Прочее »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB