Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Задача на массивы (http://www.tehnari.ru/f41/t87662/)

grisha2207 20.04.2013 20:21

Помогите с задачей я даже идею придумать не могу
Дан массив целых чисел длинной n в котором числа могут повторятся.Найти наиболее часто встречающееся число.Если таких чисел несколько то определить наименьшее из них
P.S Сортировать элементы массива мы якобы не умеем.

Через Паскаль

interacia 20.04.2013 20:57

Код:

program Array14;
var
j,i:integer; // счетчик в цикле
N:integer;
kol,kol0:integer;
Otvet:integer;
a: array [1..100] of integer;
begin
// ввод размера массива
 writeln('Введите N (N<10)'); readln(N);
 for i:=1 to N do
 begin
 write('a[',i,']=');
 readln(A[i]); // ручной ввод значений массива
 end;
 // вывод результата
writeln('Результат');
kol0:=0;
Otvet:=a[1];
 for i:=1 to N-1 do
 begin
 kol:=0;
 for j:=i+1 to N do  if a[j]=a[i] then inc(kol);
if kol>kol0 then begin Otvet:=a[i]; kol0:=kol; end;
if kol=kol0 then begin Otvet:=a[i];end;
 end;
 inc(kol0);
 Writeln('Ответ число : ',Otvet,' встречается ',kol0,' раз');
end.


Vladimir_S 20.04.2013 21:48

Цитата:

Сообщение от grisha2207 (Сообщение 899023)
Помогите с задачей я даже идею придумать не могу
Дан массив целых чисел длинной n в котором числа могут повторятся.Найти наиболее часто встречающееся число.Если таких чисел несколько то определить наименьшее из них
P.S Сортировать элементы массива мы якобы не умеем.

Через Паскаль

Получите:

Код:

Const
 N=16;
Var
 A,B,Num:Array[1..N] of Byte;
 i,j,M,Max_num,Min,Imin,Q:Byte;
 Mn:Set of Byte;
Begin
 for i:=1 to N do B[i]:=0;
 Mn:=[];
 M:=0;
 Randomize;
 for i:=1 to N do
  begin
  A[i]:=Random(N div 2);
  write(A[i]:4);
  end;
 writeln;
 writeln;
 for i:=1 to N do
  begin
  if Not(A[i] in Mn) then
    begin
    Inc(M);
    Mn:=Mn+[A[i]];
    Num[M]:=0;
    B[M]:=A[i];
    for j:=i to N do
      if A[i]=A[j] then Inc(Num[M]);
    end;
  end;
 for i:=1 to M do
  writeln(B[i],' - ',Num[i],' times');
 writeln;
 Max_num:=0;
 for i:=1 to M do
  if Num[i]>Max_num then Max_num:=Num[i];
 Min:=N;
 Q:=0;
 for i:=1 to M do
  if Num[i]=Max_num then
  begin
    write(B[i]:4);
    Inc(Q);
  end;
 writeln('  - ',Max_num,' times');
 writeln;
 if Q>1 then
  begin
  for i:=1 to M do
    if (Num[i]=Max_num) and (B[i]<Min) then
    begin
      Min:=B[i];
      Imin:=i;
    end;
  writeln(B[Imin]:4,'  - minimal');
  end;
 Readln
End.

Interacia, оставляю свой вариант только потому, что Ваш несколько недоделан: не отработана ситуация, когда максимальное число повторений встречается не для одного, а для нескольких значений элементов массива. Между прочим, это сильно усложняет задачу. Но, увы, впрямую оговорено условием. Более того, предписано из таких значений найти наименьшее.
P.S. Вообще-то обычно я в таких случаях (если кто-то из коллег-программистов меня "опередил") свой пост ликвидирую. Но здесь, повторяю, случай особый.


Часовой пояс GMT +4, время: 08:43.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.