Автор | Сообщение |
|
Отправлено: 20.02.13 22:22. Заголовок: Чей алгоритм лучше?
Константин Юрьевич, проконсультируйте, пожалуйста. Решал такую задачу С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
[только новые]
|
|
|
| Администратор
|
Сообщение: 468
|
|
Отправлено: 21.02.13 06:45. Заголовок: Danko пишет: Какой л..
Danko пишет: цитата: | Какой лучше, и нет ли в моем решении ошибок? |
|
Ваше решение всегда выдает максимальный элемент. Очевидно, что это неверно.
|
|
|
|
Отправлено: 21.02.13 20:59. Заголовок: То есть, необходимо ..
То есть, необходимо отбросить минимальное значение и находить ср.знач оставшихся чисел?
|
|
|
|
| Администратор
|
Сообщение: 470
|
|
Отправлено: 22.02.13 06:53. Заголовок: Danko пишет: необход..
Danko пишет: цитата: | необходимо отбросить минимальное значение и находить ср.знач оставшихся чисел? |
|
Да. Только учесть, что значений, равных минимальному, может быть несколько.
|
|
|
|
Отправлено: 23.02.13 19:21. Заголовок: Вот еще решал С4 из ..
Вот еще решал С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.
|
|
|
|