Автор | Сообщение |
|
Отправлено: 25.04.23 08:56. Заголовок: № 3770
Добрый день. Как можно упростить программу(работает очень долго) ? 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)
|
 |

|
Ответов - 2
[только новые]
|
|
|
Отправлено: 26.04.23 18:31. Заголовок: Как более простой ва..
Как более простой вариант 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)
|
 |

|
|
Отправлено: 24.06.23 08:56. Заголовок: Вот еще более скорос..
Вот еще более скоростной вариант 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)
|
 |

|
|