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

Другой ответ в №3763

inform_lesson: [pre2]Добрый день. В номере 3763(А.Кабанов) получается ответ 4576 800. В чём моя ошибка ? const n=1000; var m:array[1..n] of integer; a,i,k,j,p,f,max,l:integer; sr:real; begin assign(input,'26-47.txt'); for i:=1 to n do begin readln(a); m[ i]:=a; end; max:=0; for i:=1 to n-1 do begin for j:=2 to n do begin k:=m[ i]+m[ j]; sr:=k/2; end; for p:=1 to n do begin if m[ p]<sr then inc(f); if (f mod 100=0)and(f>0) then begin inc(l); if f>max then max:=f; end; end; f:=0; end; write(l/2,' ',max); end. [/pre2]

Ответов - 8

cabanov.alexey: ПОЧИТАЙТЕ ТЕКСТ В ЖЁЛТОЙ РАМКЕ

inform_lesson: Исправил

cabanov.alexey: Ваш код содержит огромное количество алгоритмических ошибок. Решать надо вот так [pre2] const n = 1000; var m: array[1..n] of integer; i, j, p, f, max, l: integer; sr: real; begin assign(input, '26-47.txt'); readln(); for i := 1 to n do readln(m[ i ]); max := 0; l := 0; for i := 1 to n - 1 do for j := i+1 to n do begin f := 0; sr := (m[ i ] + m[j]) / 2; for p := 1 to n do if m[p] < sr then inc(f); if (f mod 100 = 0) and (f > 0) then begin inc(l); if f > max then max := f; end; end; write(l, ' ', max); end. [/pre2]


vmsedov: cabanov.alexey по программе ответ получается 8315 900. В условие 4885 900

cabanov.alexey: cabanov.alexey по программе ответ получается 8315 900. В условие 4885 900 Моё решение выше выдаёт 4885 900. cabanov.alexey более того, такое решение, если даже ответ 8315 900 верный, " прокатит" только на файле, где нет повторяющихся чисел (В файле в условие повторяющихся нет. Это довольно просто проверить через stream().distinct() и сравнить размеры до и после). Ненулевое значение это значение не равное 0, а не больше 0. Решать "так" не надо. Цитата из условия задачи: Гарантируется, что все числа различны. Дальнейшую претензию не особо понял, с учётом того что речь про количество чисел.

vmsedov: cabanov.alexey более того, такое решение, если даже ответ 8315 900 верный, " прокатит" только на файле, где нет повторяющихся чисел (В файле в условие повторяющихся нет. Это довольно просто проверить через stream().distinct() и сравнить размеры до и после). Ненулевое значение это значение не равное 0, а не больше 0. Решать "так" не надо.

inform_lesson: Спасибо

gutgut: Задание 26 предполагает использование сортировки. На Паскале Ваше решение работает и без сортировки, но на Питоне программа с тремя (!) вложенными циклами будет работать очень долго. Грамотное решение - используем сортировку. Пусть L - отсортированный список чисел. Поскольку гарантируется, что все числа различны, то количество чисел, меньших L[ i] равно i (элементы списка в Питоне нумеруются с 0). Обозначим через sr - среднее арифметическое пары L[ i] и L[j], k- количество элементов списка, меньших, чем sr. Так как список отсортирован, то гарантированно k>i, и равно максимальному значению, для которого L[k] < sr. Программа: [pre2] f = open('26-47.txt') n=int(f.readline()) L=sorted(int(x) for x in f.read().split()) f.close() num=0 kmax=0 for i in range(n-1): for j in range(i+1,n): sr=(L[ i]+L[j])/2 k=i while L[k]<sr: k+=1 if k>0 and k%100==0: # k>0 можно убрать! num+=1 if k>kmax: kmax=k print(num,kmax) [/pre2]



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