|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Создание алгоритма оптимизации кода
Задан некий прямоугольник (квадрат - частный случай) со сторонами n и m. Левая верхняя точка имеет координаты х=0, у=0. Нижняя правая точка прямоугольника имеет координаты х=n, y=m. Требуется заполнить прямоугольник точками в строгой последовательности, начиная от точки х=0,у=0 к точкам x=n, y=m. Последовательность такая:
например, для прямоугольника со сторонами n=7, m=4 (8x5=40 точек): 01. x=0 y=0 02. x=1 y=0 03. x=0 y=1 04. x=2 y=0 05. x=1 y=1 06. x=0 y=2 07. x=3 y=0 08. x=2 y=1 09. x=1 y=2 10. x=0 y=3 11. x=4 y=0 12. x=3 y=1 13. x=2 y=2 14. x=1 y=3 15. x=0 y=4 16. x=5 y=0 17. x=4 y=1 18. x=3 y=2 19. x=2 y=3 20. x=1 y=4 21. x=6 y=0 22. x=5 y=1 23. x=4 y=2 24. x=3 y=3 25. x=2 y=4 26. x=7 y=0 27. x=6 y=1 28. x=5 y=2 29. x=4 y=3 30. x=3 y=4 31. x=7 y=1 32. x=6 y=2 33. x=5 y=3 34. x=4 y=4 35. x=7 y=2 36. x=6 y=3 37. x=5 y=4 38. x=7 y=3 39. x=6 y=4 40. x=7 y=4 Требуется разработать алгоритм оптимизации кода, чтобы он имел как можно меньше строк. В данном примере приведен примитивный случай, когда стороны прямоугольника имеют небольшие значения. Значения на самом деле могут быть очень большими, например, n=3000, m=2000. Ширина прямоугольника может быть меньше высоты. Максимальный размер прямоугольника 32767х32748 пикселей. |
#2
|
|||
|
|||
Вот, написал на коленке за пять минут - не проверял
Код:
var Sum:Integer; X,Y:Integer; for Sum := 0 to (N+M) do begin for Y:=0 to Sum do begin X:= Sum-Y; if X<0 then Continue; if Y<0 then Continue; if X>=N then Continue; if Y>=M then Continue; DoSomeg(X,Y); end; end; |
Этот пользователь сказал Спасибо icWasya за это полезное сообщение: | ||
VyachNik (17.02.2012)
|
#3
|
||||
|
||||
спасибо, код работает!
проверку можно так сделать: if (x<=n) and (y<=m) then вывести точку с координатами (х,у); |
#4
|
||||
|
||||
а как будет выглядеть код, если немножко изменить условие задачи, например, нам нужно заполнить этот же прямоугольник диагоналями, идущими от точки (х=0, у=m) к точке (х=n, y=0), то есть от левого нижнего угла к правому верхнему углу? (диагонали перпендикулярны прямой, на которой лежат эти точки)
может подскажите? |