Автомат получает на вход четырёхзначное десятичное число. По полученному числу строится новое десятичное число по следующим правилам. 1. Вычисляются два числа — сумма двух старших разрядов, а также сумма двух младших разрядов заданного числа. 2. Полученные два числа записываются друг за другом в порядке невозрастания (без разделителей). Пример. Исходное число: 1277. Поразрядные суммы: 3, 14. Результат: 143. Определите, сколько из приведённых ниже чисел могут получиться в результате работы автомата. В ответе запишите только количество чисел. 1616 169 163 1916 1619 316 916 116
Объяснение:
procedure F(n: integer);
begin
if n>0 then begin
Write (n);
F(n-2);
F(n div 4);
end
end;
begin
F(9);
end.
На выходе будет 97531112
Если нужна трассировка, её можно сделать примерно так:
procedure F(n: integer);
begin
Writeln('Вход');
if n>0 then begin
Writeln ('В выходную строку: ',n);
Writeln('Вызов F(n-2)');
F(n-2);
Writeln('Вызов F(n div 4)');
F(n div 4);
end;
Writeln('Выход')
end;
begin
F(9);
end.
Результат трассировки:
Вход
В выходную строку: 9
Вызов F(n-2)
Вход
В выходную строку: 7
Вызов F(n-2)
Вход
В выходную строку: 5
Вызов F(n-2)
Вход
В выходную строку: 3
Вызов F(n-2)
Вход
В выходную строку: 1
Вызов F(n-2)
Вход
Выход
Вызов F(n div 4)
Вход
Выход
Выход
Вызов F(n div 4)
Вход
Выход
Выход
Вызов F(n div 4)
Вход
В выходную строку: 1
Вызов F(n-2)
Вход
Выход
Вызов F(n div 4)
Вход
Выход
Выход
Выход
Вызов F(n div 4)
Вход
В выходную строку: 1
Вызов F(n-2)
Вход
Выход
Вызов F(n div 4)
Вход
Выход
Выход
Выход
Вызов F(n div 4)
Вход
В выходную строку: 2
Вызов F(n-2)
Вход
Выход
Вызов F(n div 4)
Вход
Выход
Выход
Выход
Объяснение:
using System;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
bool InArea = false;
Console.Write("R=");
double R = double.Parse(Console.ReadLine());
Console.Write("x=");
double x = double.Parse(Console.ReadLine());
Console.Write("y=");
double y = double.Parse(Console.ReadLine());
// Проверяем попадает ли в полукруг
if (x <= 0 && y >= 0 && x * x + y * y <= R * R) InArea = true;
// Проверяем попадает ли в первую половинку треугольника
// Уравнение прямой будет y=-2x
if (x > 0 && x <= R/2.0 && y >= -2*x && y<=0) InArea = true;
// Проверяем попадает ли во вторую половинку треугольника
// Уравнение прямой будет y=2x-2R
if (x > 0 && x <= R / 2.0 && y >= 2 * x - 2 * R && y <= 0) InArea = true;
if(InArea) Console.WriteLine("Точка принадлежит области");
else Console.WriteLine("Точка не принадлежит области");
Console.ReadLine();
}
}
}