| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Ошибка в алгоритме. |
| Автор: dajver 26.2.2007, 16:52 | ||||
| Итак, дан двумерный массив 8 на 8, заполненный случайным образом. Его нужно преобразовать в одномерный массив по следующей схеме: .Моя программа:
Если я правильнопонял компилятор:
то у меня происходит выход за границы массива. Подскажите, пожалуйста, в чем моя ошибка. p.s. Под хордой квадрата я понимаю любую прямую линию из элементов массива, параллельную побочной диагонали. |
| Автор: Norb 26.2.2007, 22:29 | ||||||||
| Ну я постараюсь ответить наиболее полно и в меру своих пониманий дела. Но скажу откровенно, что сам алгоритм я не понял в принципе, но и свою версию пока что придумал в общих чертах, но реализовать пока не пытался, так что может он и не верный. Мои домыслы: Вот выдержка из программы:
Во-первых: у тебя массивы
то есть i и j строго меньше n, и значит, что никогда не выполнится условие (j==n) Далее что касается выхода за пределы массива. у тебя i и j пробегают в пределах от 0 до n, точнее до n-1. В таком случае максимальное значение k=n-1+n-1+1=2*n-1, а m=(2*n-1)(2*n-2)/2=(n-1)(2*n-1)=2*n*n - 3*n +1. Значит в выражении
|
| Автор: dajver 26.2.2007, 23:09 |
| Да, спасибо, и с первым (просто запутался с итерацией) и со вторым (как раз, ошибка алгоритма). Буду думать дальше. |
| Автор: nornad 27.2.2007, 04:07 | ||
Вот примерный вариант решения. Я его не проверял, но идея вроде бы верная. Нарекаю алгоритмом маятника.
|
| Автор: sergejzr 27.2.2007, 04:20 | ||||
Что-то когда-то здесь писал на эту тему...
Цикл можно заменить на:
Скорее всего у nornad будет поэлегантнее. Добавлено @ 04:21 А вообще оптимальное решение - это где-то в JPEG алгоритме |
| Автор: nornad 28.2.2007, 08:33 | ||
В алгоритме (моём) была ошибка. Вот исправленный вариант:
Всё-таки код проверять стоит. |