В
Все
М
Математика
О
ОБЖ
У
Українська мова
Д
Другие предметы
Х
Химия
М
Музыка
Н
Немецкий язык
Б
Беларуская мова
Э
Экономика
Ф
Физика
Б
Биология
О
Окружающий мир
Р
Русский язык
У
Українська література
Ф
Французский язык
П
Психология
А
Алгебра
О
Обществознание
М
МХК
В
Видео-ответы
Г
География
П
Право
Г
Геометрия
А
Английский язык
И
Информатика
Қ
Қазақ тiлi
Л
Литература
И
История
Svetakim0934
Svetakim0934
30.09.2020 14:21 •  Информатика

Напишите функцию search для поиска первого вхождения заданного значения в массиве целых чисел, которая как результат возвращает индекс найденного элемента.

перегрузите эту функцию так, чтобы она могла работать с массивом вещественных чисел. в случае, если в массиве искомого элемента нет, функция должна вернуть значение -1.

для двух массивов - целочисленного и вещественного - выведите индексы первого вхождения заданных элементов.

формат входных данных
в первой строке вводится натуральное число n1 (n1 ≤ 1) - размер первого массива.

в следующей строке вводятся n1 целых чисел, по модулю не превосходящих 109.

далее вводится одно целое число, по модулю не превосходящее 109 - искомое значение.

в следующей строке вводится натуральное число n2 (n2 ≤ 1) - размер второго массива.

в следующей строке вводятся n2 вещественных чисел, заданных с точностью до 6 знаков после точки и по модулю не превосходящих 109.

далее вводится одно вещественное число с точностью до 6 знаков после точки и по модулю не превосходящее 109 - искомое значение.

формат выходных данных
в первой строке выведите результат поиска в первом массиве, а во второй -- во втором массиве

входные данные
5

68 52 14 61 96

61

6

30.89 58.12 3416 58.12 6.279 368.9

58.12

выходные данные
3

1​

Показать ответ
Ответ:
KiskaDasha
KiskaDasha
04.01.2021 02:18
Можно написать программу на каком-либо языке программирования. Например Python:

n = 66
count = 0
for i in range(67):
  for j in range(34):
     for k in range(14):
         for l in range(7):
            if n == i*1+j*2+k*5+l*10:
                count += 1
print('Всего

Та же программа на языке Pascal:

var i,j,k,l,n,count:integer;

begin
n := 66;
count := 0;
for i:=0 to 66 do
    for j:=0 to 33 do
        for k:=0 to 13 do
            for l:=0 to 6 do
                if n = (i*1+j*2+k*5+l*10) then count += 1;
  writeln('Всего
end.

ответ: 700
0,0(0 оценок)
Ответ:
DockVIP
DockVIP
04.01.2021 02:18
Вариант понимания условия №1. Мы достаём монеты по одной, и порядок монет важен (т.е., например, если мы вытащили сначала монету 1 рубль, потом 5 рублей и если сначала 5 рублей, потом 1 рубль - разные
Обозначим C(n) - число набрать n рублей. Очевидно, C(n) = C(n-1) + C(n-2) + C(n-5) + C(n-10) [Представим себе. что мы знаем число набрать n-5 рублей. Тогда если мы уверены, что последней вытащили 5-рублёвую монету, то будет C(n). Финальный ответ - сумма по всем возможным выборам последней монеты]
Полагая C(n) = 0 при всех n < 0, C(0) = 1, получим по этой формуле
С(66) = 1431020833989040 
Cчитать можно, например, такой программой:
var  C: array[-9..66] of BigInteger;
begin
  for var i := -9 to -1 do
    C[i] := 0;
  C[0] := 1;
  for var i := 1 to 66 do
    C[i] := C[i - 1] + C[i - 2] + C[i - 5] + C[i - 10];
  print(C[66]);
end.
Вариант понимания условия №2. Нам порядок выдачи не важен. Тогда вопрос по сути сводится к числу целых неотрицательных решений уравнения
x + 2y + 5z + 10t = 66, где x, y, z, t - число 1-, 2-, 5- и 10-рублёвых монет соответственно.
Тут можно написать общую формулу, но она будет объемной, так что вычислять по ней совсем не радостно (даже с компьютером). Поэтому проще все варианты перебрать. ответ получится 700.
Пример программы:
begin
  var count := 0;
  for var t := 0 to 6 do
    for var z := 0 to (66 - 10*t) div 5 do
      for var y := 0 to (66 - 10*t - 5*z) div 2 do
        inc(count);
  print(count);
end.

Подобным образом можно считать и вручную. По сути нам требуется вычислить сумму [1 + (66 - 10t - 5z)/2] по всем допустимым t, z ([x] - целая часть x). Перебираем сначала t, потом z:
t = 0. z = 0,1,2,...,13. Вклад в сумму 34 + 31 + 29 + 26 + 24 + 21 + 19 + 16 + 14 + 11 + 9 + 6 + 4 + 1 = 245.
t = 1. z = 0,1,2,...,11. Легко понять, что здесь будут все числа без первых двух слагаемых: 29 + 26 + 24 + 21 + 19 + 16 + 14 + 11 + 9 + 6 + 4 + 1 = 245 - 34 - 31 = 180
Аналогично, t = 2: 180 - 29 - 26 = 125
t = 3: 125 - 26 - 21 = 80
t = 4: 80 - 19 - 16 = 45
t = 5: 45 - 14 - 11 = 20
t = 6: 20 - 9 - 6 = 5
Итого 245 + 180 + 125 + 80 + 45 + 20 + 5 = 700
0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота