Прикреплённый файл «2012-12-14.yomkosti.py»

Загрузка

   1 #!/usr/bin/env python
   2 # coding: utf
   3 '''
   4 Радиолюбитель Петя решил собрать детекторный приемник. Для этого ему понадобился конденсатор емкостью C мкФ. В распоряжении Пети есть набор из n конденсаторов, емкости которых равны c1, c2, ..., cn, соответственно. Петя помнит, как вычисляется емкость параллельного соединения двух конденсаторов (Cnew = C1 + C2) и последовательного соединения двух конденсаторов (Cnew = (C1*C2)/(C1+C2)). Петя хочет спаять некоторую последовательно-параллельную схему из имеющегося набора конденсаторов, такую, что ее емкость ближе всего к искомой (то есть абсолютная величина разности значений минимальна). Разумеется, Петя не обязан использовать для изготовления схемы все конденсаторы. (Напомним определение последовательно-параллельной схемы. Схема, составленная из одного конденсатора, – последовательно-параллельная схема. Любая схема, полученная последовательным соединением двух последовательно-параллельных схем, – последовательно-параллельная, а также любая схема, полученная параллельным соединением двух последовательно-параллельных схем, – последовательно-параллельная).
   5 
   6     Формат входных данных: В первой строке входных данных содержатся числа n и C. Во второй строке задается последовательность емкостей имеющихся в наличии конденсаторов с1, с2, ..., сn. Значения всех емкостей – вещественные числа. Для всех наборов входных данных n < 7. 
   7 
   8     Формат выходных данных: Выведите минимально отличающуюся от C емкость последовательно-параллельной схемы из имеющихся конденсаторов. Результат выводите с шестью знаками после запятой.
   9 '''
  10 
  11 # Не будем вводить n, само посчитается :)
  12 C = float(raw_input().split()[1])
  13 c = [float(e) for e in raw_input().split()]
  14 
  15 def Key(e): return abs(C-e)
  16 
  17 CT = min(c, key=Key)
  18 
  19 def addc(c):
  20     global CT
  21     for i in xrange(len(c)-1):
  22         for j in xrange(i+1,len(c)):
  23             cn1 = c[i]+c[j]
  24             cn2 = c[i]*c[j]/cn1
  25             CT=min(CT, cn1, cn2, key=Key)
  26             cn=c[:i]+c[i+1:j]+c[j+1:]
  27             addc([cn1]+cn)
  28             addc([cn2]+cn)
  29 
  30 addc(c)
  31 print "{0:6f}".format(CT)

Прикреплённые файлы

Для ссылки на прикреплённый файл в тексте страницы напишите attachment:имяфайла, как показано ниже в списке файлов. Не используйте URL из ссылки «[получить]», так как он чисто внутренний и может измениться.

Вам нельзя прикреплять файлы к этой странице.