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

Егэ 2019, не могу разобраться, . №22 первая команда увеличивает число на экране на 1, вторая умножает его на 2. программа для исполнителя калькулятор – это последовательность команд. сколько существует программ, для которых при исходном числе 2 результатом является число 33 и при этом траектория вычислений содержит число 16 и не содержит числа 30? можете максимально подробно расписать решение, объяснить что к чему? заранее .

👇
Ответ:
ksenla200xxx
ksenla200xxx
18.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(35 оценок)
Открыть все ответы
Ответ:
Stak96
Stak96
18.05.2020
Using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace zn
{
    class Program
    {
        public static void Main(string[] args)
        {
            int sum = 0;
            int m = 1;
            Console.Write("Введите n > ");
            int n = Convert.ToInt32(Console.ReadLine());
            for(int i=0; i<n; i++)
            {
                Console.Write("Введите число > ");
                int c = Convert.ToInt32(Console.ReadLine());
                if (c.ToString().EndsWith("3") || c.ToString().EndsWith("4"))
                    sum += c;
                if (c % 5 == 0 && c % 3 != 0)
                    m *= c;
            }
            Console.WriteLine("Сумма чисел заканчивающихся на 3 или на 4: " + sum);
            Console.WriteLine("Произведение чисел, делящихся на 5, но не на 3: " + m);
            Console.ReadKey();
        }
    }
}
4,7(86 оценок)
Ответ:
Azdes
Azdes
18.05.2020
Язык не указан, Default-Language это C. На нём и напишу.
1.
#include <stdio.h>
int main() {
    int n;
    scanf("%d", &n);
    if (n % 10 == 4 || n % 10 == 7 || n / 10 == 4 || n / 10 == 7)
        printf("YES\n");
    else
        printf("NO\n");
    return 0;
}
Для порядку скажу что на Perl это можно реализовать проще.
#!perl
%h { 4 => 0, 7 => 0};
<>;
if (exists $h{$_%10} || exists $h{$_/10}) {
    print "YES\n";
else {
    print "NO\n";
}
Но мы ушли от темы. Итак, 2. Тут всё ещё проще:
#include <stdio.h>
int main() {
    int n;
    scanf("%d", &n);
    if (!(n % 3))
        printf("Multiple of 3\n");
    else
        printf("Not multiple of 3\n");
    if (n % 10 == 3)
        printf("Ends by 3\n");
    else
        printf("Not ends by 3\n");
    return 0;
}
Тут более простой реализации на другом известном мне языке нету, так что приводить дополнительно ничего не буду.
4,4(68 оценок)
Это интересно:
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ