Форум » Массивы, сортировка, работа с файлами » № 3770 » Ответить

№ 3770

inform_lesson: Добрый день. Как можно упростить программу(работает очень долго) ? [pre2] n=5000 m=n*[ 0] k=0 minsr=1000000000 with open('26-53.txt') as f: for i in range(0,n): a=int(f.readline()) m[ i]=a for i in range(0,n-1): for j in range(i+1,n): if m[ i]%2==0 and m[ j]%2==0: for g in range(0,n): if (m[ i]+m[ j])/2==m[ g]: k+=1 minsr=min(minsr,(m[ i]+m[ j])/2) print(k,minsr) [/pre2]

Ответов - 2

1llumi: Как более простой вариант [pre2] a = [int(i) for i in open("26-53.txt")][1:] c = [int(i) for i in a if i%2==0] count = 0 for i in range(len(c)): print(i) for j in range(i+1, len(c)): if ((c[ i]+c[j])/2) in a: count += 1 c.sort() d = c[:2] print(count, (d[0]+d[1])/2)[/pre2]

Ж: Вот еще более скоростной вариант [pre2] f=open('c:/26-53.txt') n=int(f.readline()) s=[int(c) for c in f.readlines()] s2={s:i for i in range(len(s))} # поиск элемента в словаре по ключу происходит в разы быстрее чем в списке k=0; mi=2**30 for (a,b) in combinations([c for c in s if c%2==0],2): if (a + b) // 2 in s2: k+=((a + b) // 2 in s2); mi=min(mi,(a + b) // 2 ) print(k,mi) [/pre2]



полная версия страницы