Помощь - Поиск - Пользователи - Календарь
Полная версия: Наибольшее число в последовательности и его размещение
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Kolyancz
Задана последовательность N чисел. N<=1000. Найдите наибольшее число в этой последовательности и укажите на какой позиции оно находится. Если число повторяется, то указать все его позиции.
Например: для последовательности 569 3 567 94 569 219 546
Ответ:
569
1 5
Впорос: как выглядит функция определения наибольшего числа и расчета его размещений?
Ozzя
Последовательность как хранится? В массиве? Или массивы использовать нельзя?
Kolyancz
Цитата(Ozzя @ 9.12.2008 15:35) *

Последовательность как хранится? В массиве? Или массивы использовать нельзя?

В массиве.
amega
один из ваирантов;
 
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
Это можно сделать за один проход по основной последовательности... В случае, когда N может достигать 1000, это желательно делать именно за один, а не за два прохода...

P.S. К тому же, amega, твой вариант не отработает, если в исходной последовательности нет чисел больше 0...
amega
тогда поменять прото начальное max:=0;

а можеш выложить алгоритм за один проход ?
volvo
Цитата
тогда поменять прото начальное max:=0;
smile.gif Тогда не отработает, если все числа - меньше чем 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
смотри а если у нас 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);
Айра
  if a[i] = max then begin
inc(j); //а вот это что по твоему? как раз таки увеличение j на 1цу
b[j] := i;

amega
а, ну да недогледел чуть-чуть !yessir.gif
Kolyancz
Да, все правильно. Вот полное решение, всем спасибо.

Код

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.


Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.