Заполнить массив случайными числами и отсортировать его. Ввести число X. Используя...

0 голосов
948 просмотров

Заполнить массив случайными числами и отсортировать его. Ввести число X.
Используя двоичный поиск, определить, сколько чисел, равных X, находится в массиве.
Пример:
Массив:
1 4 7 3 9 2 4 5 2
После сортировки:
1 2 2 3 4 4 5 7 9
Введите число X:
4
Число 4 встречается 2 раз(а).
Пример:
Массив:
1 4 7 3 9 2 4 5 2
После сортировки:
1 2 2 3 4 4 5 7 9
Введите число X:
14
Число 14 не встречается.


Информатика (82 баллов) | 948 просмотров
Дано ответов: 2
0 голосов
Правильный ответ

Добавьте двоичный поиск для поиска элемента массива, равного x. 
{ двоичный поиск }
{ l - левая граница для поиска }
{ r - правая граница для поиска }
l:=1;
r:=n;
while true do
 begin
   i:=(l+r) div 2;
   if a[i]=x then break;
   if a[i]>x then r:=i
   else  if a[l]end;
k:=0;
for i:=l to r do
 if a[i]=x then k:=k+1;
{ конец двоичного поиска }

(9.7k баллов)
0

В двоичном поиске bag - не работает, когда числа х нет в массиве, исправить не могу, ответ не коррекрируется

0 голосов

:D 
Ну го Ничего если  на паскале напишу ? 
uses crt;
var  a:array[1..50] of integer ;i,j,n,x,t,k:integer;b:string;
begin
read(n);     
for i:= 1 to n do     
begin     
a[i]:=random(15);     
write(a[i],' ');     
end;     
writeln;     
for i:= 1 to n-1 do     
for j:= i+1 to n do     
if a[i]> a[j] then begin t:=a[i]; a[i]:=a[j]; a[j]:=t; end;     
for i:= 1 to n do     
write(a[i],' ');     
writeln;     
read(x);     
for i:= 1 to n do     
 if a[i] = x then k:=k+1;     
 str(k,b);     
n:=length(b);     
 if k in  [11..19] then write (k,' раз') else     
 if k = 0 then  write('число ',x,' не встречается ')else     
case b[n] of     
 '0','1','5','6','7','8','9': write (k,' раз');     
 '3','4','2': write (k,' раза') ;     
end;
end.

(30 баллов)
0

Я ж не уточнил, на паскале и надо:)

0

Ну кароч как то так вроде бы все орфографические правила учёл

0

Спасибо

0

добавьте двоичный поиск