Сейчас на форуме: rmn (+6 невидимых) |
![]() |
eXeL@B —› Оффтоп —› Паскаль задачка. застрял на полуслове... |
Посл.ответ | Сообщение |
|
Создано: 06 января 2009 01:02 · Личное сообщение · #1 Что-то я застрял на решении детской олимпиадной задачки. вот условие. Составить программу ввода квадратной матрицы и печати в строку всех ее элементов в заданном ниже порядке следования. ![]() На этой картинке исходная марица показана черным цветом. Цифры идут по возрастанию, отсюда понимаю, что обход по диагональной змейке - как показано на рисунке справа. Я что-то пытался сделать на бумаге, но сделал не совсем то. сделал то, что показано на нижнем рисунке. Привожу свой код. Он не оптимизирован. Вряд ли его можно исправить под нужный обход. Я целый день уже думаю... Code:
![]() |
|
Создано: 06 января 2009 02:05 · Личное сообщение · #2 |
|
Создано: 06 января 2009 03:27 · Поправил: Isaev · Личное сообщение · #3 |
|
Создано: 06 января 2009 03:30 · Личное сообщение · #4 |
|
Создано: 06 января 2009 03:36 · Поправил: Isaev · Личное сообщение · #5 Вот такое вот совсем не олимпиадное решение детской олимпиадной задачки... Зато для любого размера матрицы, хотя тебе это и не надо на Delphi, хотя надо на паскале... Но работает! А ещё я очень расстроен, т.к. это был именно тот нечестый вечер, когда я хотел по-раньше лечь поспать и наконец выспаться... ![]() Ну не ПЕРЕД СНОМ нужно кричать помогите, сегодня сдавать! Короче, Mavlyudov, с тебя подарок ![]() ----- z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh ![]() |
|
Создано: 06 января 2009 03:39 · Личное сообщение · #6 |
|
Создано: 11 января 2009 22:41 · Личное сообщение · #7 Isaev Так, так...интересно, но очень сложно и немного не то. Мне нужно для консольного режима. Свой код для матрицы на нижнем рисунке я привел... Вчера набросал кое-что на бумаге. Но не могу скомпоновать в программу, чтобы в ней были вложенные циклы FOR(и не было процедур и циклов while). Очень прошу помощи. Выкладываю свои записи ниже. Оформляю так, как ц меня на бумаге. ЗАпись "ПРоверка1--->a[4,2]" означает, что после проверки значение a[i,j] стало равным a[4,2]. (т.е. перешлди с предыдущего элемента на a[4,2]). Для матрица 4 на 4. -------------ПРОВЕРКА-1------------------- if (i=4) or (i=1) then j:=j+1; if (j=1) or (j=4) and (i<>4) then i:=i-1; -----------END OF ПРОВЕРКА-1-------------- ------------ПРОВЕРКА-2--------------------- if K mod 2=0 then begin i:=i-1; j:=j-1; end; if K mod 2=1 then begin i:=i+1; j:=j+1; end; ---------END OF ПРОВЕРКА-2----------------- //============================================ НАЧАЛО ПРОГРАММЫ K:=3; i:=4; j:=1; ПРОВЕРКА1 ---> K=2; A[4,2]; ПРОВЕРКА2 ---> K=1; A[3,1]; ПРОВЕРКА1 ---> K=1; A[2,1]; ПРОВЕРКА2 ---> K=1; A[3,2]; ПРОВЕРКА1 ---> K=1; A[4,3]; ПРОВЕРКА1 ---> K=0; A[4,4]; ПРОВЕРКА2 ---> K=0; A[3,3]; ПРОВЕРКА2 ---> K=0; A[2,2]; ПРОВЕРКА2 ---> K=0; A[1,1]; ПРОВЕРКА1 ---> K=-1; A[1,2]; ПРОВЕРКА2 ---> K=-1; A[2,3]; ПРОВЕРКА2 ---> K=-1; A[3,4]; ПРОВЕРКА1 ---> K=-2; A[2,4]; ПРОВЕРКА2 ---> K=-2; A[1,3]; ПРОВЕРКА1 ---> K=-3; A[1,4]; Вот всё, что получилось(((( ![]() |
|
Создано: 12 января 2009 02:09 · Поправил: coderess · Личное сообщение · #8 |
|
Создано: 12 января 2009 13:09 · Личное сообщение · #9 На вскидку вышло вот так. Code:
Наверняка можно покрасивее и свернуть условия покороче.. Но, в принципе, и на бОльших матрицах работает ![]() ![]() |
![]() |
eXeL@B —› Оффтоп —› Паскаль задачка. застрял на полуслове... |