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

Определите, какое значение приобретет переменная b после выполнения условного оператора if, если а = 13.

if а% 10 <3: b = a * 2
elif а% 10 <= 5: b = a + 10
elif а% 10 <= 7: b = a * 10
else: b = a + 1

Показать ответ
Ответ:
GizaHelinc
GizaHelinc
13.01.2020 17:23

Описание алгоритма:

Будем наращивать длину последовательности от 0 знаков до N. Пусть после какого-то количества шагов у нас выписаны все последовательности длины А и мы хотим узнать количество подходящих последовательностей длины А+1. Распределим все последовательности на три группы(так как предыдущие символы нас не волнуют, то любые последовательности одной группы для нас равнозначны):

1) Заканчиваются на 0.

2) Ровно на одну единицу

3) Ровно на две единицы.

Из каждой последовательности группы 1 приписыванием нуля или единицы мы можем получить одну последовательность группы 1 и одну - группы 2. Неважно, какие именно, но они не перекрываются, т.к. предыдущие символы различны, хоть мы их и не учитываем. Точно так же из второй группы мы получаем одну последовательность группы 3 и одну группы 1, а из группы 3 - только группу 1. Таким образом, если количества последовательностей длины А по группам были (x, y, z), то для длины А+1 такое распределение будет (x+y+z, x, y). Если взять для длины 0 тройку (0, 0, 1) и просчитать тройки от 1 до N, получится искомое количество. Для N=1 и N=2 также работает правильно.

Программа на Pascal:

var num00,num01,num11,mem00:integer;

   n,i:byte;

begin

readln(n);

 num00:=1;

 for i:=1 to n do begin

   mem00:=num11;

   num11:=num01;

   num01:=num00;

   num00:=num01+num11+mem00;

 end;

writeln(num11+num01+num00);

end.

0,0(0 оценок)
Ответ:
spirt708ozrmv0
spirt708ozrmv0
06.02.2021 03:38
Выполняя алгоритм, получаем следующий результат (15 итераций)

1. 0..65534 -> 32767
2. 0..32766 -> 16383
3. 0..16382 -> 8191
4. 0..8190  -> 4095
5. 0..4094  -> 2047
6. 2048..4094 -> 3071
7. 2048..3070 -> 2559
8. 2560..3070 -> 2815
9. 2816..3070 -> 2943
10. 2944..3070 -> 3007
11. 2944..3006 -> 2975
12. 2976..3006 -> 2991
13. 2992..3006 -> 2999
14. 3000..3006 -> 3003
15. 3000..3002 -> 3001

Если лень перебирать вручную, можно воспользоваться программой

var k,l,r,x,f:integer;
begin
f := 3001;
l := 0;
r := 65534;
x := (l + r) div 2;
k := 1;
while (x <> f) and (l < r) do
  begin
  writeln(k,' ',l,' ',r,' ',x);
  k := k + 1;
  if f < x then r := x - 1
    else l := x + 1;
  x := (l + r) div 2
  end;
writeln(k,' ',l,' ',r,' ',x);
end.
0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота