Найти - Пользователи
Полная версия: Округление
Начало » Python для новичков » Округление
1
ninjacat
Input: кол-во чисел N, их среднее арифметическое D
Output: N чисел, среднее арифметическое которых должно быть равно D. Все числа должны быть разными!
pill
Если просто побаловаться то прямолинейный брут сойдет наверное:
import random

DELTA = 2

def average(lst):
return sum(lst)/len(lst)

def backaverage_brute(N, av):
low = int(av/DELTA)
high = int(av + (av - av/DELTA))
c = 0
while True:
c += 1
res = [random.randint(low, high) for i in xrange(N)]
new_av = average(res)
if av == new_av:
return res, c

if __name__ == '__main__':
res = backaverage_brute(N=100, av=100)
print 'cycles: ', res[1]
print res
print 'average: ', average(res[0])
Чем больше N тем быстрее ).
ninjacat
Ах да, нужно лишь любое из всех возможных вариантов :) не обязательно все или какой-то конкретный.
p.s. вот еще такой вопрос. Есть N отрезков длинной 1м, нужно найти максимальную площадь прямоугольника, который составлен из N таких отрезков.
Вот мое решение, можно ли как-то попроще !?
N = int(open("input.txt").read())
if (N >= 4 and N % 2 == 0):
list = []
half = N/2
halfm = half-1
for x in xrange(1, halfm):
if x <= halfm:
list.append(x*(half-x))
list.sort()
open("output.txt", "w").write(str(list[-1]))
else:
print "susee\n"
ninjacat
Если N является int'ом можно как-то сделать цикл for для среза, а не создавать для таких целей halfm!?
(это чтобы ни одно из слагаемых не было равно нулю)
вот, как-то так:

for x in N[1:-2]
Если N == 100, то for будет для (1, 99)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB