Если в программе исключения используются для отработки штатных ситуаций, то практически невозможной становится отладка в режиме "остановиться, когда будет выброшено исключение". Особенно, если это какой-нибудь null reference.
Сергей: А вы не думайте в терминах "начинать новый отсчёт". Подумайте об индивидуальном элементе - что бы вы хотели увидеть в строке вывода на этом месте? И как его получить, зная $i?
Возьмите короткий массив (7 элементов). Напишите вывод за 3-4 дня. И попробуйте увидеть закономерность и найти формулу.
FanatPHP: Видимо, то, о чём я говорил. В массиве было 42 элемента, и на 9-й день в нём осталось "два элемента по порядку" - 40 и 41. А в вывод они не попали, там стало печататься сразу с нуля.
FanatPHP: Я в условии не увидел, что длина массива делится на 5. Где это написано? И задача не усложняется - наоборот, исчезнет лишняя переменная N. И разница будет только в переносе знака % на несколько символов.
Не совсем правильно. "Элементов массива хватит на N дней" - это хорошо, если число элементов делится на 5. А если нет? Пусть элементов 13 - что мы должны вывести в 3-й день? 10,11,12,0,1, не так ли?
Поэтому более правильная постановка - "мы хотим вывести 18-й элемент, а в массиве их только 13. Какой элемент сейчас выводить?"
Для более широкого набора функций (не только многочленов) можно воспользоваться методом неопределённых коэффициентов - составить и решить систему линейных уравнений, неизвестными в которых будут коэффициенты при базисных функциях. После небольшой модификации этого метода он позволит находить приближенную интерполяцию (когда точек больше, чем базисных функций), превратившись в метод наименьших квадратов.
jcmvbkbc: С чего бы это? Есть и противоположные грани, и рёбра, и вершины. Это только у тетраэдра (из правильных многогранников) их нет. И у некоторых антипризм - из полуправильных.
Kir: Если брать изображения, то пусть это будет совмещение изображений для сшивки панорамы. Без поиска характерных точек - только по глобальному совпадению фрагмента :)
Функция-то гладкая, но очень уж много локальных минимумов. Градиентный спуск в сочетании с монтекарлой для выбора исходных точек? Или сгладить до безобразия, чтобы локальных минимумов стало меньше?
lovesuper: Похоже, что вместо пяти лучей можно взять три, идущие по рёбрам правильной треугольной призмы. Но формулы там будут совсем не простые. Не исключено, что вообще придётся считать численными методами.
Вот только придётся просуммировать все значения формулы Бернулли по k от M*N/100 до M - ведь если пришло сообщений больше, чем надо, то это тоже успех. Математически это не делается.
А задача вообще на теорию вероятностей, или на программирование?
Даже если какие-то вершины внутрь попали, событие всё равно может затрагивать прямоугольники, у которых ни одна вершина не лежит внутри окружности. Так что некоторые отрезки проверять придётся.
Sergey Mozhaykin: А есть ли способ закрепить объект надолго, чтобы отдать массив какому-нибудь драйверу? Ничего, кроме создания специального потока, в котором будет только fixed и потом бесконечное ожидание, в голову не приходит. Можно ли лучше? Просить память прямо у системы не очень хочется.
pcdesign: То есть, на входе не цифры, а числа. И нужно найти вариант с более-менее одинаковыми коэффициентами при числах.
Делаете так. Заводите битовый массив B длиной, равной итоговой сумме, выраженной в общем делителе всех стоимостей товаров (например, в копейках - тогда можно справиться со счётом до 100 млн рублей, надеюсь, что этого хватит). Вычитаете из итоговой суммы S сумму стоимостей всех товаров (будем играть оптимистично - считать, что можем задействовать всё), результат назовём K. Сортируем товары от большей стоимости к меньшей (постараемся задействовать побольше дорогих товаров). Дальше делаем так:
B[0]=true;
foreach(int cost in Costs){
for(int a=cost;a <= S;a++) B[a]|=B[a-cost];
if(B[K]) break;
}
Если после этого цикла B[K]==true, то решение существует, и надо только понять, как оно получилось. Возможно, для этого понадобится дополнительный массив обратных ссылок.
Если нет, то делаете так:
foreach(int cost in Costs){
K+=cost;
if(B[K]) break;
}
Это мы разрешаем товарам, начиная с самого дорогого, не участвовать в наборе. Если в итоге получилось B[S]==false, значит, задача неразрешима.
Думаю, что строк в 30 программа уложится.
pcdesign: Если нет, то сформулируйте условие корректнее - что надо оптимизировать? Что значит "перемножить максимально возможное кол-во цифр"? У вас цифры умножаются на какие-то числа не из заданного набора. Какова роль этих чисел? Как они учитываются в оценке варианта решения?