|
|
|
|
|
для: constructor
(01.02.2008 в 19:33)
| | Сравнение с 2 равно | |
|
|
|
|
|
|
|
для: g-tech
(01.02.2008 в 06:34)
| | даа... если честно я несильно понял саму суть алгоритма, но могу предложить свой вариант решения задачи. Решается очень просто с помощью рекурсивной функции.
function go (x, y, a, n); // a - двухмерный массив. n - размер.
{
if (x = n) and (y = n) return a[x][y];
if (x = n) and (y < n) return a[x][y] + go (x, y + 1, a, n);
if (x < n) and (y = n) retrun a[x][y] + go (x + 1, y, a, n);
if (x < n) and (y < n)
{
s = go (x + 1, y, a, n);
t = go (x, y + 1, a, n);
if (s > t)
return s + a[x][y]
else return t + a[x][y];
}
}
|
Вот и сама идея... В алгоритме могут быть ошибки, не проверял.
Можно ещё добавить массив, чтобы быстрее работала, но это уже оптимизация.
P.S Когдато решал похожую задачу только на паскале. И ещё, эта задача не очень касается графов. | |
|
|
|
|
|
|
|
для: g-tech
(01.02.2008 в 06:34)
| | где-то я видел уже.)
P.S.
как-то раз попал на сайт,там было много обычных задач,которые предлагается решить
путем какого-нибудь языка программирования,только забыл я этот сайт((( | |
|
|
|
|
автор: g-tech (01.02.2008 в 06:34) |
|
|
для: SHAman
(01.12.2007 в 14:33)
| | Задачка скажем так очень сильно касается теории графов!
Скажу так, я почти ноль в PHP, пока не успел изучить! Но если забыть о синтаксисе могу предложить логический ход мыслей:
- для начала надо анализировать предоставленныю матрицу, ячейки имеют двойную индексация, так сказать координаты по x и по y, соответственно в опеределенной ячейке под определенной координатой записано определенное число. Необходимо выявить соответствие координат и "количества яблок". вообщем необходимо составить двумерный массив из записей, каждая запись будет содержать следующие параметры: координата x; координата y; число яблок;
- учтем то, что в любом случае у ежа всего 8 ходов ((n*2)-2), почему это и "ежу" понятно;
- надо учесть что "еж пьян" и при передвижении его координаты только прибавляются, то есть сдвиг вправо есть x+1 сдвиг вниз есть y+1;
- начальное количество яблок то, которое находится в ячейке (1;1); Далее анализируем ячейки справа и снизу от положения "ежа", т.е. ячейки (крд яжа + 1; крд яжа) и (крд ежа; крд ежа + 1), а точнее сопоставляем значение обозначающее количество яблок в этих ячейках. Хагаем в ту ячейку в которой число яблок больше; Координатам ежа, соответственно, присваиваем координаты выбранной ячейки; Значение собранных яблок увеличиваем на число яблок в выбранной ячейке;
- учтем, что при каждом шаге необходимо проверять значение координаты x и y ежа; если x ежа равно 5, то идем далее исключительно вниз, а если y равно 5, то, соответственно вправо;
Попрошу прокомментироват если я что-то упустил! | |
|
|
|
|
|
|
|
для: kasmanaft
(01.12.2007 в 15:38)
| | А вот, кстати, когда-то делал подсветку... Доделывать можно сколь угодно долго (а сейчас уже не хотца :) ), но если exp'у (или кому еще) будет интересно - выкладываю..
Всё номально подсвечивает - как и "чтобы выделяя коментарии одним цветом, не выделять в них ключевые слова и прочие лексемы (если они там окажутся)", так и "ещё если подсвечивать строки заключённые в "" или '' в которых будет \" или \' .... "
Работает, вроде, довольно быстро. | |
|
|
|
|
|
|
|
для: SHAman
(01.12.2007 в 14:33)
| | Никогда не умел по-умному решать подобные задачки... Ну пока везде не пробежишься, не узнаешь же ведь как лучше бежать. Итог - тупой перебор :)
---->>
Хы.. получилось, что ежик может бегать не только по квадратным матрицам.. По любым бегает :) в том числе непрямоугольным.. | |
|
|
|
|
|
|
|
для: exp
(01.12.2007 в 12:24)
| | Надо собрать не все, а максимум яблок. Нужно проложить маршрут от 1-1 к н-н, при котором можно набрать максимальное количество яблок.
Кстати, задачка весьма интересна с точки зрения алгоритма:) | |
|
|
|
|
|
|
|
для: SHAman
(30.11.2007 в 19:47)
| | в задаче с ёжиком не хватает инфы :) но он только может пройти 8 ячеек и что-бы собрать всё
надо запускать из 1:1 пять таких ёжиков ))
моя задача была нужная мне , но нечаянно стёр файл который надо-было перезаписать :(
, дайте пожалста , если знаете ссылку на справочник библиотечных функций С , просто в текстовом формате , файл ещё назывался страннол как-то SIFUNC.DSF кажется.
не скажу что правильно решил свою задачку, помоему правильнее делать как-то построчно , но мне только надо-было перезаписать , а не для постоянного использования.
например такой набросок к перл
<?php
define('COMENT_COL', 'grey'); // коменты
define('STRI_COL', 'black'); // строки
define('P_VARS_COL', 'red'); // переменные
define('KEYW_COL', 'blue'); // ключ.сл.
define('P_OPS_COL', '#222299'); // операторы
define('FNC_COL', '#992222'); // функции
define('STYLE_COD', 'font: 26px Arial Unicode MS; color: #009900;');
function test_reg(&$item)
{
$item = '#\b(' . $item . ')\b#i';
}
function codlight($document, $simv = '') # $simv эт так, заплатка
{
if ($simv !== '') $document = str_replace('\\' . $simv, $simv, $document);
$document = str_replace(array('<', '>', '"'), array('<', '>', '"'), $document);
# строки
$str = '#((\'|").*?((?<!\x5c)\\2))#s';
$replace = '<font color="' . STRI_COL . '">$1</font>';
$document = preg_replace($str, $replace, $document);
# коментарии
$str = array('"((?:(?<!\$)#|\/\/).*)$"me', '#(\/\*.*?\*\/)#se');
$replace = '\'<font color="' . COMENT_COL . '">\' . strip_tags(\'$1\') . \'</font>\'';
$document = preg_replace($str, $replace, $document);
# массив
$document = preg_split('#((?:<font.+?</font>\s*)+)#s', $document, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
$p_vars = '"((?:\$#?|\@|%)(\w+|\_|\~|\!))"';
$keywords = array('break', 'case', 'continue', 'default', 'die', 'do', 'else', 'elsif', 'for', 'foreach', 'if', 'goto', 'last', 'next', 'switch', 'return', 'redo', 'sub', 'until', 'while');
array_walk($keywords, 'test_reg');
$funcshns = array('chop', 'close', 'closedir', 'delete', 'each', 'eof', 'eval',
'fopen', 'fwrite', 'grep', 'index', 'join','keys', 'length',
'open', 'opendir', 'pack', 'pop', 'print', 'printf', 'push',
'require', 'reverse', 'rindex','rewinddir',
'scalar', 'seek', 'seekdir', 'shift', 'sort', 'splice', 'split', 'sprintf',
'substr', 'sysread', 'syswrite', 'telldir',
'_toupper', 'tzset', 'ultoa', 'umask', 'unshift', 'unpack');
array_walk($funcshns, 'test_reg');
$p_ops = '#((&(?:lt|gt);|[\*\+\/\-\=\!\?\|\~\.\,\:\;\[\]\(\)\{\}\|]+|&+)[\2]*?\s*)#s';
for ($i = 0; $i < count($document); $i++)
{
if (strpos($document[ $i ],'<') === 0) continue;
$document[ $i ] = preg_replace($p_ops, '<font color="' . P_OPS_COL . '"><b>$1</b></font>', $document[ $i ]);
$document[ $i ] = preg_replace($p_vars, '<font color="' . P_VARS_COL . '"><b>$1</b></font>', $document[ $i ]);
$document[ $i ] = preg_replace($keywords, '<font color="' . KEYW_COL . '"><b>$1</b></font>', $document[ $i ]);
$document[ $i ] = preg_replace($funcshns, '<font color="' . FNC_COL . '"><b>$1</b></font>', $document[ $i ]);
}
return '<pre style="' . STYLE_COD . '">' . implode('', $document) . '</pre>';
}
$contents = file_get_contents('Perl' . $pg . '.txt');
echo $contents = preg_replace('#[perl](.+?)[/perl]#se', "codlight('\\1', '\"')", $contents );
?>
| с файлом 50kb работает где-то 0.4 секунды ,а эт много | |
|
|
|
|
|
|
|
для: exp
(28.11.2007 в 01:57)
| | Могу предложить задачку, про которую мне рассказал друг. Им такую задачку давали на олимпиаде по программированию, когда он в школе учился.
есть квадратная матрица. Любого размера. Пусть, 5х5. Каждая клетка матрицы - сад. В каждом саду есть яблоки. Количество яблок указано в ячейке матрицы. В ячейке 1:1 есть ёжик. Ёжик немного пьян, поэтому может бежать только вправо и вниз по матрице, собирая по пути все живое(яблоки). Задача у ёжика совсем непростая: таким вот зигзугом пробежать до ячейки n:n (у нас 5:5) и собрать по пути максимально возможное количество яблок.
Задачка кажется простой, но на самом деле имеет очень элегантное и красивое решение.
Если отойти от абстрактных задачек и подойти к практическим, дающим опыт, то нужно делать что-то конкретное, которым можно пользоваться. Я вот написал пару сайтов, постоянно решаю задачки какие-то, использую программы в повседневной жизни. Нужна мне прога для красивого однотипного переименования файлов в указанной директории по шаблону - написал. Заодно C# немного поизучал. Нужна прога, которая чистит html из ворда - написал. Просто делайте мир лучше и опыт придет. | |
|
|
|
|
|
|
|
для: Trianon
(28.11.2007 в 00:40)
| | и ещё если подсвечивать строки заключённые в "" или '' в которых будет \" или \'
например
<pre>
#include <stdio.h>
main () /* Преобразовать шестьнадцатеричное или восьмеричное
число к десятичному виду */
{
int numassigned,val;
printf("Введи шестьнадцатеричное и восьмеричное #, или 00 выход:\n");
do {
printf(" #=");
numassigned = scanf("%i, &val);
printf("Десятичное = %i\n", val);
}
while ( val && numassigned);
/* Цикл закончится, когда введут 00 или scanf не сможет
преобразовать входное поле */
}
</pre>
| если будет printf("\"Десятичное\" число = %i\n", val);
до этого я пока не додумывался :) но подсвеченные слова обесцветил в комментариях | |
|
|
| |
|