from random import randint
# Создание списка,
# его сортировка по возрастанию
# и вывод на экран
a = []
for i in range(10):
a.append(randint(1, 50))
a.sort()
print(a)
# искомое число
value = int(input())
mid = len(a) // 2
low = 0
high = len(a) - 1
while a[mid] != value and low <= high:
if value > a[mid]:
low = mid + 1
else:
high = mid - 1
mid = (low + high) // 2
if low > high:
print("Такого значения нет")
else:
if (mid == 0 and a[1] != a[0]) or (mid == len(a) - 1 and a[mid - 1] != a[mid]):
print(1)
else:
q = 0
for i in range(mid, len(a)):
if a[i] == a[mid]:
q += 1
else:
break
for i in range(mid - 1, 0, -1):
if a[i] == a[mid]:
q += 1
else:
break
print(q)
Чтобы убрать вывод массива просто на 10-й строке убери print(a), а для вывода неотсортированного массива вставь после 8-й строки.
Задачки такого типа не имеют однозначного решения, можно предложить нескольео вариантов и все они будут правильные. Слишком мало членов дано.
Вот мои версии.
а. 1; 3; 6; 4; 11; 5; 16; 6 (на нечётных местах всё время +5, на чётных +1)
б. 9; 7; 10; 4; 11; 1; 12; -2; ... (на нечётных +1, на чётных -3)
в. 3; 2; 1; 6; 5; 4; 9; 8; 7; 12; 11; 10... (тройки n;n-1;n-2; первое число тройки - последовательные числа, кратные 3)
Могу предложить ещё несколько ДРУГИХ вариантов продолжения последовательностей и все они, повторюсь, будут ПРАВИЛЬНЫМИ.
Одно только замечание: ВСЕГДА нужно указывать алгоритм или формулу, по которой последовательность строится(продолжается).
//PascalABC.Net 3.0, сборка 1064
var
s:string;
i,k:integer;
begin
Write('Введите натуральное число: '); Readln(s);
k:=0;
for i:=1 to Length(s) do
if s[i]='0' then Inc(k);
Writeln('Количество нулей в записи числа равно ',k)
end.
Пример:
Введите натуральное число: 13054000230
Количество нулей в записи числа равно 5
2. Современное решение
//PascalABC.Net 3.0, сборка 1064
begin
var s:=ReadString('Введите натуральное число: ');
Writeln('Количество нулей в запиcи числа равно ',s.Where(x->x='0').Count)
end.
Пример:
Введите натуральное число: 13054000230
Количество нулей в записи числа равно 5