На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
  
> Ещё одна задачка для ума :)
    Вот вспомнил, как два дня потратил на один алгоритмик (день вспоминал школьный курс тригонометрии, день отлаживал). Стало интересно, а на сколько мой алгоритм компактен. Посему предлагаю Вам реализовать сей алгоритм и показать мне результаты, а потом я приведу своё решение и вместе сравним :)

    Итак, должна быть функция, имеющая на входе всего один параметр - количество кружков (цифры в кружках не имеют значение). Функция должна рисовать примерно следующее (см. картинки), в зависимости от кол-ва кружков. Соответственно, если на входе еденица, то должен быть нарисован просто кружок. Для наглядности привожу результат работы функции с входным значением 3:

    [img width=229 height=243]http://www.sources.ru/download/bas1.gif[/img]

    и входным значением 5:

    [img width=261 height=252]http://www.sources.ru/download/bas2.gif[/img]


    ЗЫ: это не просьба решить задачу, это для тех у кого серое вещество простаивает :)
      можно я на сях:

      void func(int n)
      {
      for(int i=0;i<n-1;i++)
       for(int j=i+1;j<n;j++)
         draw(i,j);    // draw from i to j && j to i
      }

      :)
        Увы, эта задачка решается оптимально при любом методе :)
        Дело в том, что любой правильный алгоритм вызовет процедуру draw (N^2-N)/2 раз. Так что и трудоемкость у них будет одинаковая.
          забыл добавить, что стрелочки надо рисовать именно так, как на рисунках :)
            То есть как это? По какому закону?
              ну а если тебе ничего не скажут про законы, то ты не сможешь родить алгоритм ? :)

              Тыкс ... у меня ощущение, что я плохо разъяснил задачу.

              Ну представим, что две вышеприведённые картинки я нарисовал от руки. А слабо сварганить такую функцию, которая нарисует тоже самое ?
                А что там особенного в расположении стрелочек???
                Каждый кружок связан со всеми остальными
                  та ничего особенного в расположении стрелочек нет :)
                  и не нада делать такую удивлённую причёску ;)
                    Да не, ну просто народ удивляется...

                    А насчет программы, я может напишу да пришлю как-нибудь, если хочешь...
                    Только я думаю, что все присланые программы будут суть одно и то же...
                      понятно, что набор тригонометрических уравнений будет одинаков. Но мне интересны организация циклов и оптимизация, так как у меня не было времени на оптимизацию.
                        Можно через векторы делать (и аффинные преобразования векторов).
                        - делаешь массив векторов для центров кружков
                        - задаешь координаты центра первого кружка (вектор) относительно центра координат.
                        - рассчитываешь угол поворота 2Pi/n
                        - делаешь матрицу поворота (два на два для плоскости) на полученый угол
                        - в цикле умножаешь i-тый вектор на матрицу, получается новый вектор (центр кружка i+1)

                        из тригонометрии только sin(2Pi/n) и cos(2Pi/n) при создании матрицы поворота
                        Сообщение отредактировано: m -
                          на самом деле задача - фигня, но способов её решения я вижу несколько :)
                          1) рассчитывать координаты каждого кружка и сразу рисовать
                          2) запихнуть в массив координаты вершин правильного н-угольника и передать этот массив функции, которая всё сразу нарисует :)

                          имхо второй способ будет работать быстрее -)
                          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                          0 пользователей:


                          Рейтинг@Mail.ru
                          [ Script execution time: 0.1797 ]   [ 15 queries used ]   [ Generated: 24.10.26, 00:55 GMT ]