Задана последовательность N чисел. N<=1000. Найдите наибольшее число в этой последовательности и укажите на какой позиции оно находится. Если число повторяется, то указать все его позиции. Например: для последовательности 569 3 567 94 569 219 546 Ответ: 569 1 5 Впорос: как выглядит функция определения наибольшего числа и расчета его размещений?
Ozzя
9.12.2008 21:35
Последовательность как хранится? В массиве? Или массивы использовать нельзя?
Kolyancz
9.12.2008 22:34
Цитата(Ozzя @ 9.12.2008 15:35)
Последовательность как хранится? В массиве? Или массивы использовать нельзя?
В массиве.
amega
9.12.2008 23:09
один из ваирантов;
var a,b:array [1..7] of integer; max,i,j:integer; begin max:=1; j:=1; for i:=1 to 7 do if a[i]>max then max:=a[i]; //находим в цикле максимальный элемент
for i:=1 to 7 do if a[i]=max then begin b[j]:=i; //нормируем новый массив состоящий из позиций максимального элеммента j:=j+1; end; // вывод позиции // for i:=1 to j-1 do wrie(' ',j); //
volvo
9.12.2008 23:13
Это можно сделать за один проход по основной последовательности... В случае, когда N может достигать 1000, это желательно делать именно за один, а не за два прохода...
P.S. К тому же, amega, твой вариант не отработает, если в исходной последовательности нет чисел больше 0...
amega
9.12.2008 23:34
тогда поменять прото начальное max:=0;
а можеш выложить алгоритм за один проход ?
volvo
9.12.2008 23:37
Цитата
тогда поменять прото начальное max:=0;
Тогда не отработает, если все числа - меньше чем 0... Все проще: надо присваивать max первому элементу последовательности...
Вот однопроходный алгоритм:
max := a[1]; j := 0; for i := 1 to n do begin if a[i] = max then begin inc(j); b[j] := i; end else if a[i] > max then begin max := a[i]; j := 1; b[j] := i; end; end;
for i := 1 to j do write(b[i]:5);
amega
9.12.2008 23:51
смотри а если у нас 1ий елент максимальный И он только один что происходит (например 99 1 2 3 2 1 1 5)
max := a[1]; j := 0; <------------------------------------------------ j=0 for i := 1 to n do begin if a[i] = max then begin <-------------------------------------------- 1ий елемент максимальній inc(j); b[j] := i; <------------------------------------------- b[0]:=1; end else if a[i] > max then begin <---- вариант на елс выполнятся не будет max := a[i]; j := 1; b[j] := i; <---- а значит j не присвоится 1 end; end;
for i := 1 to j do <------------------------------------------ кода выводим начинаем выводить с b[1] !!!!! write(b[i]:5);
Айра
10.12.2008 0:24
if a[i] = max then begin inc(j); //а вот это что по твоему? как раз таки увеличение j на 1цу b[j] := i;
amega
10.12.2008 1:52
а, ну да недогледел чуть-чуть
Kolyancz
10.12.2008 19:00
Да, все правильно. Вот полное решение, всем спасибо.
Код
var J,i,n,max: integer; a :array[1..1000] of integer; b:array[1..1000] of integer; begin n:=0; while not eoln do begin inc(n); read(a[n]); end; begin max := a[1]; j := 0; for i := 1 to n do begin if a[i] = max then begin inc(j); b[j] := i; end else if a[i] > max then begin max := a[i]; j := 1; b[j] := i; end; end; writeln(max); for i := 1 to j do write(b[i]:5);
readln; readln end; end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.