Форум » Обработка числовых последовательностей » Чей алгоритм лучше? » Ответить

Чей алгоритм лучше?

Danko: Константин Юрьевич, проконсультируйте, пожалуйста. Решал такую задачу С4, различаются алгоритмы решения. Мой и предложенный. Какой лучше, и нет ли в моем решении ошибок? Спасибо! Мой: var N, i, s, sum, max, count: integer; begin sum := 0; count := 0; max := 0; writeln('Введите число показаний'); Readln(N); for i := 1 to N do begin writeln('Введите показание'); readln(s); if s > max then begin max := s; sum := s; count := 1; end else if s = max then begin sum := sum + s; count := count + 1; end; end; Writeln(sum / count); end. Предложенный: var N, min, t, sum, i, mincount: integer; ave: real; begin sum := 0;mincount := 1; writeln('Введите число показаний'); Readln(N); for i := 1 to N do begin writeln('Введите показание'); Readln(t); sum := sum + t; if i = 1 then min := t else if t < min then begin min := t; mincount := 1; end else if t = min then mincount := mincount + 1; end; ave := (sum - mincount * min) / (N - mincount); end. Задача:http://fastpic.ru/view/52/2013/0220/7209d2b908cf756e0aa396582e612f2a.jpg.html

Ответов - 4

Поляков: Danko пишет: Какой лучше, и нет ли в моем решении ошибок? Ваше решение всегда выдает максимальный элемент. Очевидно, что это неверно.

Danko: То есть, необходимо отбросить минимальное значение и находить ср.знач оставшихся чисел?

Поляков: Danko пишет: необходимо отбросить минимальное значение и находить ср.знач оставшихся чисел? Да. Только учесть, что значений, равных минимальному, может быть несколько.


Danko: Вот еще решал С4 из диагност. работы от 14 декабря 2012 г. На сколько "потянет" такое решение? var N, i, x, y, h, miny, maxy, h1, miny1, maxy1: integer; s: string; k, m: shortint; begin h := 0; h1 := 0; miny := 0; miny1 := 0; maxy := 0; maxy1 := 0; k := 1; m := 1; readln(N); for i := 1 to N do begin readln(s); x := strtoint(copy(s, 1, pos(' ', s) - 1)); y := strtoint(copy(s, pos(' ', s) + 1, length(s) - pos(' ', s))); if x = 0 then begin if y > 0 then begin if m = 1 then begin maxy := y; miny := y; m := 0; end else if y > maxy then maxy := y else if y < miny then miny := y; end; if y < 0 then begin if k = 1 then begin maxy1 := y; miny1 := y; k := 0; end else if y > maxy1 then maxy1 := y else if y < miny1 then miny1 := y; end; end; if (y > 0) and (x <> 0) then begin if abs(x) > h then h := abs(x); end; if (y < 0) and (x <> 0) then begin if abs(x) > h1 then h1 := abs(x); end; end; if (((abs(maxy - miny)) / 2) * h) >= (((abs(maxy1 - miny1)) / 2) * h1) then writeln(((abs(maxy - miny)) / 2) * h) else writeln(((abs(maxy1 - miny1)) / 2) * h1); end.



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