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
Форумы портала PHP.SU :: Версия для печати :: Вопрос к программистам [6]
Форумы портала PHP.SU » Разное » Прочее » Вопрос к программистам

Страниц (9): « 1 2 3 4 5 [6] 7 8 9 »
 

76. soffrick - 25 Июля, 2013 - 14:10:04 - перейти к сообщению

VenZell
PHP:
скопировать код в буфер обмена
  1. return empty($clean_str) ? true : false;

зачем так? Улыбка
77. EuGen - 25 Июля, 2013 - 14:11:40 - перейти к сообщению
Одна из классических задач по упаковке.

Существует некоторый контейнер с максимальной грузоподъёмностью W. Существует N грузов ei. Каждый груз имеет две характеристики - вес wi и стоимость vi (1 < i <= N). Считаем, что геометрические особенности грузов и контейнера несущественны, и единственная характеристика - это вес. Набор предметов может быть помещён в контейнер, если суммарный вес набора не превышает W. Каждый предмет можно выбрать только один раз.

Дан входной набор данных для грузов ei, который представляет собой массив из пар значений - веса предмета wi и стоимости предмета vi - пусть для определённости это будет реализовано как ассоциативный массив с ключами weight и value. Дано также число W. Все значения весов и стоимостей, а также грузоподъёмность контейнера W - являются положительными целыми числами.
Для определённости также считаем, что 0 < W <=100 и 0 < wi <=100 (то есть все веса предметов, а также грузоподъёмность контейнера больше нуля и меньше либо равны 100).
Далее, количество грузов N тоже положительно (не может быть пустого набора) и не превышает 1E5

Требуется
- по данному набору предметов {ei} и числу W найти число V, которое является максимальной суммарной стоимостью предметов, которые удалось поместить в контейнер (сумма весов этих предметов не превышает W) - то есть написать функцию getMaxValue, принимающую два параметра - набор грузов и величину W, и возвращающую единственное целое число V - максимально достижимую стоимость набора предметов, которые можно поместить в контейнер.
Пример:
PHP:
скопировать код в буфер обмена
  1. $rgData = [
  2.    ['weight'=>2, 'value'=>4],
  3.    ['weight'=>5, 'value'=>7],
  4.    ['weight'=>1, 'value'=>3],
  5.    ['weight'=>3, 'value'=>4]
  6. ];
  7. $iMaxWeight = 5;
  8. var_dump(getMaxValue($rgData, $iMaxWeight)); //8

вариант (Отобразить)
78. VenZell - 25 Июля, 2013 - 14:17:31 - перейти к сообщению

soffrick, парные скобки из строки удаляются, остаются только те, что остались без пары. Соответственно, если выходная строка пуста - все скобки правильно закрыты. Отсюда такое условие.
upd: понял, где косяк.
79. Мелкий - 16 Августа, 2013 - 11:54:38 - перейти к сообщению
По задачке со скобками вариант. Как говорится, не делайте так, но так сделать можно:
Спойлер (Отобразить)
80. EuGen - 16 Августа, 2013 - 11:57:51 - перейти к сообщению
Мелкий
Сделать можно. Плохо масштабируется на другое число скобок (и/или другие пары), разумеется. Вообще обработать строку регулярным выражением до работы проверки корректности расстановки скобок - идея хорошая, поскольку позволяет сократить объем работы, вероятно, на порядки.
81. nerv - 17 Августа, 2013 - 21:16:10 - перейти к сообщению
вариант со скобками (не самый оптимальный)

CODE (javascript):
скопировать код в буфер обмена
  1. function test( text ) {
  2.     var hash = { '(': 1, '[': 1, '{': 1, '}': -1, ']': -1, ')': -1 };
  3.     var position = { '(': 0, '[': 1, '{': 2, '}': 2, ']': 1, ')': 0 };
  4.     var index = text.length;
  5.     var result = [ 0, 0, 0 ];
  6.  
  7.     while( index-- ) {
  8.         var chr = text[ index ];
  9.         result[ position[ chr ] ] += hash[ chr ];
  10.  
  11.         if ( result[ position[ chr ] ] > 0 ) {
  12.             return false;
  13.         }
  14.     }
  15.  
  16.     return !result.filter(function( item ) { return item !== 0; }).length;
  17. }
  18.  
  19. console.log( 'abc([dy]*[dx]Fz)', test( 'abc([dy]*[dx]Fz)' ) );
  20. console.log( 'pqr[Gdz)/(Hdx]', test( 'pqr[Gdz)/(Hdx]' ) );
  21. console.log( 'foo', test( 'foo' ) );
  22. console.log( 'foo()', test( 'foo()' ) );
  23. console.log( ']', test( ']' ) );
  24. console.log( '(){[]}', test( '(){[]}' ) );
82. EuGen - 25 Сентября, 2013 - 16:35:02 - перейти к сообщению
Поясните, почему в PHP следующие две программы дадут одинаковый результат (3) :

и
PHP:
скопировать код в буфер обмена
  1. $x = 1;
  2. $y = $x + $x + $x++;


hint0 (Отобразить)


hint1 (Отобразить)
83. LIME - 25 Сентября, 2013 - 16:55:51 - перейти к сообщению
мне кажется дело в отложенном копировании
?
84. EuGen - 25 Сентября, 2013 - 16:56:42 - перейти к сообщению
LIME пишет:
мне кажется дело в отложенном копировании

Нет. Далеко от истины - и не поясняет разницы при применении "@" (см. hint0 - впрочем, ответа нет ни в одном из hint)
85. SAD - 25 Сентября, 2013 - 16:57:31 - перейти к сообщению
мозг бдыщь
86. imya - 25 Сентября, 2013 - 16:57:50 - перейти к сообщению
EuGen , из-за посткремента ?
87. EuGen - 25 Сентября, 2013 - 16:59:53 - перейти к сообщению
imya пишет:
из-за посткремента ?

Из-за постинкремента что?
88. imya - 25 Сентября, 2013 - 17:03:36 - перейти к сообщению
EuGen пишет:
Из-за постинкремента что?


Получается одинаковый результат.

Ведь если написать ++$x(прекремент) , то произойдёт операция $х = $х+1, а потом уже остальные действия. В случае же с $x++(посткремент), вначале выполнятся действия, предшествующие операции, а после уже $х=$х+1.

Или я неправ?
89. LIME - 25 Сентября, 2013 - 17:05:30 - перейти к сообщению
постинкремент создает временную переменную
а преинкремент увеличивает настоящую
но как бы и что?))
90. EuGen - 25 Сентября, 2013 - 17:05:42 - перейти к сообщению
imya пишет:
Или я неправ?

Нет. Это не поясняет ничего - то есть вопрос остаётся в силе - вне зависимости от того, как работает постинкремент, нужно понять, почему в первом случае слагаемых два (и один постинкремент), а во втором - три (и снова постинкремент один и на той же позиции), но результат одинаковый. И, как бонус - почему при применении "@" в первом случае результат меняется (и почему на 2)

 

Powered by ExBB FM 1.0 RC1