Входное тестирование

Курс рассчитан на учеников, имеющих опыт программирования, достаточный для решения простейших алгоритмических и математических задач. Чтобы этот опыт продемонстрировать, необходимо решить следующие две задачи:

  1. «Второй максимум». В заданной последовательности из N==1000 чисел {Ai} найти второй по величине её элемент, то есть число B такое, что

    • ∀i ∈ 1..N {Ai}≤B либо {Ai} ≠ M, (при этом M — максимум последовательности).

    В случае, если такого B не существует, вывести Нет.

  2. «Семиугольник в круге». По заданным X1 , Y1 , … , X7 , Y7 — координатам вершин выпуклого семиугольника — и X0 , Y0 , R — координатам центра круга и его радиусу — определить, расположен ли семиугольник внутри круга (если вершина принадлежит окружности, т. е. находится на границе, считать как удобнее, например, что она всё ещё внутри).

Результаты

Домашнее задание

Разбор задач (извините, сразу на языке Python :) ; он очень простой, убедитесь сами!): Вообще говоря, в обоих случаях не нужно хранить всю последовательность: достаточно вводить очередной элемент и обрабатывать его

  1. Никаких хитростей в алгоритме нет, просто выполняем условия. Главное — не упрощать (M=max(A,M); B=max(B,min(M,A)) и прочие чрезмерно упрощённые варианты не работают! Почему, кстати?)

       1 N=10
       2 B=M=input()             # Сначала B и M равны первому элементу
       3 for i in xrange(N-1):   # N-1 раз введём и проверим остальные элементы
       4     A=input()
       5     if M==A:
       6         continue        # Значения не меняются
       7     if M<A:             # Новый максимум
       8         M,B=A,M         # То же самое, что B=M; M=A
       9     elif B<A or B==M:   # Новый второй максимум (или его всё ещё не было)
      10         B=A
      11 
      12 if B!=M:
      13     print B
      14 else:
      15     print "Нет"
    
  2. Для удобства сначала введём X0 , Y0 и R, а затем — координаты вершин семиугольника. Если все они принадлежат кругу, то и весь многоугольник — тоже

       1 X0,Y0,R=input("Введите X0,Y0,R через запятую: ")
       2 for i in xrange(7):
       3     X,Y=input()
       4     if (X-X0)**2+(Y-Y0)**2>R**2:    # Нет необходимости вычислять корни
       5         print "Не принадлежит"
       6         break                       # немедленный выход из цикла
       7 else:                               # 'else' к оператору 'for' выполняется, если
       8     print "Принадлежит"             # цикл завершился без помощи оператора break
    

Условные обозначения


CategoryClass CategoryVmsh

LecturesVMSH/Python/2013-10-11 (последним исправлял пользователь FrBrGeorge 2014-11-07 22:24:51)