М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
evaIA24102003
evaIA24102003
03.05.2020 15:37 •  Информатика

Дано 2 числа найти большее из них
алгоритм​

👇
Ответ:
Люсик20
Люсик20
03.05.2020

Вычитаем первое число из второго.

Если результат отрицательный, то первое меньше второго.

Если нулевой, то они равны.

Если положительный, то первое больше второго.

Найдем разность между первым и вторым значением: c=a-b

Все что нам требуется сделать, это выяснить, является ли с положительным числом.

Например, используя функцию сигнум, можно получить вариант функции Хевисайда, которая будет принимать значение 1 только для положительных значений, а во всех остальных случаях обращаться в ноль. f(c)=[(sgn(c)+1/)2]

В нашем случае можно записать, что max(a,b)=a*f(c)+b*f(-c)

Так мы можем сравнить два числа, не прибегая к логическому сравнению.

Конечно, данный алгоритм реализуем при условии наличия встроенной функции сигнум (она присутствует даже в старом Бейсике ). Но даже если такой встроенной функции нет, ее написание не составит большого труда.

4,5(39 оценок)
Открыть все ответы
Ответ:
Marikalitkina
Marikalitkina
03.05.2020
// PascalABC.NET 3.1, сборка 1239 от 08.05.2016
begin
  var b:array[1..6,1..6] of integer:=(
    (19,21,23,25,27,29),(57,59,61,63,65,31),
    (55,81,83,85,67,33),(53,79,89,87,69,35),
    (51,77,75,73,71,37),(49,47,45,43,41,39));
  var a:array[1..6,1..6] of integer;  
  var k:=2;
  var k0,k1:integer;
  for var i:=1 to 6 do begin
    for var j:=1 to 6 do Print(b[i,j]);
    Writeln
    end;
  Writeln;
  repeat
    k0:=0;
    k1:=0;
    Writeln('k=',k);
    for var i:=1 to 6 do begin
      for var j:=1 to 6 do begin
        if (b[i,j] mod k) mod 2=0 then
          begin a[i,j]:=1; Inc(k1) end
        else begin a[i,j]:=0; Inc(k0) end;
        Print(a[i,j])
        end;
      Writeln
      end;
    Writeln('k0=',k0,', k1=',k1);
    if k0<>k1 then Inc(k)
  until k0=k1;
  Writeln(NewLine,'k=',k)
end.

Решение
19 21 23 25 27 29
57 59 61 63 65 31
55 81 83 85 67 33
53 79 89 87 69 35
51 77 75 73 71 37
49 47 45 43 41 39

k=2
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
k0=36, k1=0
k=3
0 1 1 0 1 1
1 1 0 1 1 0
0 1 1 0 0 1
1 0 1 1 1 1
1 1 1 0 1 0
0 1 1 0 1 1
k0=12, k1=24
k=4
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
k0=36, k1=0
k=5
1 0 0 1 1 1
1 1 0 0 1 0
1 0 0 1 1 0
0 1 1 1 1 1
0 1 1 0 0 1
1 1 1 0 0 1
k0=14, k1=22
k=6
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
k0=36, k1=0
k=7
0 1 1 1 1 0
0 0 0 1 1 0
1 1 1 0 1 0
1 1 0 0 1 1
1 1 0 0 0 1
1 0 0 0 1 1
k0=16, k1=20
k=8
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
k0=36, k1=0
k=9
0 0 0 0 1 1
0 0 0 1 1 1
0 1 1 1 1 1
1 0 1 1 1 1
1 0 0 0 1 0
1 1 1 0 0 0
k0=16, k1=20
k=10
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
k0=36, k1=0
k=11
1 1 0 0 0 0
1 1 1 1 1 0
1 1 1 1 0 1
0 1 0 1 0 1
0 1 0 0 0 1
0 0 0 1 1 1
k0=16, k1=20
k=12
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
k0=36, k1=0
k=13
1 1 1 1 0 0
0 0 0 0 1 0
0 0 0 0 1 0
0 0 0 0 1 0
1 1 1 1 1 0
1 1 1 1 1 1
k0=18, k1=18

k=13

ответ: 13
4,5(96 оценок)
Ответ:
nourdana
nourdana
03.05.2020

22

Объяснение:

Понятно, что каждая из команд может только увеличить число.

У нас обязательно есть число 16, из него есть два пути:

1. сделать +1

2. сделать x2

Если мы сделаем +1, то после этого уже точно не сможем сделать x2, т.к. 17 x 2 =  34, а 34 > 33, а уменьшить число мы не сможем. Если мы будем делать постоянно +1, то мы точно пройдём через 30.

Значит не нужно делать +1, когда мы на числе 16, а надо делать x2.

Следовательно, концовка у нас точно будет такая 16 -> 32 -> 33.

Теперь надо посчитать, сколько различных получить 16 из 2. К любому такому мы допишем нашу концовку и получим программу подходящую под наши условия, и к тому же все программы, подходящие под данные условия, выглядят именно так.

Считать сколькими можно получить 16 из 2 будет динамическим программированием.

ans[i] - количество различных программ, которые получают i из 2.

Очевидно, ans[2] = 1 (пустая программа).

ans[3] = 1 (нужно сделать +1)

ans[4] = ans[3] + ans[2] = 2 (можно сделать +1 к 3, а можно x2 к 2)

Далее вычисления всегда следующие:

ans[i] = ans[i - 1] + ans[i / 2] для чётных i (можно либо добавить +1 к числу i - 1, либо сделать x2 для числа i / 2)

ans[i] = ans[i - 1] для нечётных i (можно получить только путём добавления +1 к числу i - 1)

Итак, считаем:

ans[2] = 1

ans[3] = ans[2] = 1

ans[4] = ans[3] + ans[2] = 2

ans[5] = ans[4] = 2

ans[6] = ans[5] + ans[3] = 4

ans[7] = ans[6] = 4

ans[8] = ans[7] + ans[4] = 6

ans[9] = ans[8] = 6

ans[10] = ans[9] + ans[5] = 8

ans[11] = ans[10] = 8

ans[12] = ans[11] + ans[6] = 12

ans[13] = ans[12] = 12

ans[14] = ans[13] + ans[7] = 16

ans[15] = ans[14] = 16

ans[16] = ans[15] + ans[8] = 22

Значит 16 из 2 можно получить И столькими же можно получить 33 из 2 выполняя условия задачи.

4,7(83 оценок)
Это интересно:
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ