Задание 6 № 17324
Автомат обрабатывает натуральное число N по следующему алгоритму:
1. Строится двоичная запись числа N.
2. Удаляется первая слева единица и все следующие непосредственно за ней нули. Если после этого в числе не остаётся цифр, результат этого действия считается равным нулю.
3. Полученное число переводится в десятичную запись.
4. Новое число вычитается из исходного, полученная разность выводится на экран.
Пример. Дано число N = 11. Алгоритм работает следующим образом.
1. Двоичная запись числа N: 1011.
2. Удаляется первая единица и следующий за ней ноль: 11.
3. Десятичное значение полученного числа 3.
4. На экран выводится число 11 – 3 = 8.
Сколько разных значений будет показано на экране автомата при последовательном вводе всех натуральных чисел от 10 до 1000?
Домашние задания: Информатика
Объясните более подробно, почему не 6, а 7 . Откуда +1 взялось.
Экспериментально с помощью программы получено 7. Не 6 из-за чисел от 10 до 15, действительно, т. к. от 8 до 16 будет выводиться 8.
Результат выполнения программы:
8: 10 - 2 [1,0]
16: 16 - 0 []
32: 32 - 0 []
64: 64 - 0 []
128: 128 - 0 []
256: 256 - 0 []
512: 512 - 0 []
Сама программа:
program PascalABCdotNET;
function DecToBin(dec: uint64): array of byte;
begin
var bin: array of byte;
var i: byte := 0;
repeat
SetLength(bin, Length(bin) + 1);
bin[i] := dec mod 2;
dec := dec div 2;
i += 1;
until dec = 0;
Result := bin;
end;
function BinToDec(bin: array of byte): uint64;
begin
var dec: uint64;
for var i := 0 to High(bin) do
if i > 0 then dec += Round(Power(bin[i] * 2, i))
else dec += bin[i];
Result := dec;
end;
begin
var ns: set of int64;
for var n := 10 to 1000 do begin
var bin := DecToBin(n);
repeat
SetLength(bin, Length(bin) - 1);
if Length(bin) = 0 then break;
until bin[High(bin)] = 1;
var dec := BinToDec(bin);
if not (n - dec in ns) then begin
ns += [(n - dec)];
writeln((n - dec):4, ': ', n:5, ' - ', dec, #32, bin.Reverse);
end;
end;
end.
Результат выполнения программы:
8: 10 - 2 [1,0]
16: 16 - 0 []
32: 32 - 0 []
64: 64 - 0 []
128: 128 - 0 []
256: 256 - 0 []
512: 512 - 0 []
Сама программа:
program PascalABCdotNET;
function DecToBin(dec: uint64): array of byte;
begin
var bin: array of byte;
var i: byte := 0;
repeat
SetLength(bin, Length(bin) + 1);
bin[i] := dec mod 2;
dec := dec div 2;
i += 1;
until dec = 0;
Result := bin;
end;
function BinToDec(bin: array of byte): uint64;
begin
var dec: uint64;
for var i := 0 to High(bin) do
if i > 0 then dec += Round(Power(bin[i] * 2, i))
else dec += bin[i];
Result := dec;
end;
begin
var ns: set of int64;
for var n := 10 to 1000 do begin
var bin := DecToBin(n);
repeat
SetLength(bin, Length(bin) - 1);
if Length(bin) = 0 then break;
until bin[High(bin)] = 1;
var dec := BinToDec(bin);
if not (n - dec in ns) then begin
ns += [(n - dec)];
writeln((n - dec):4, ': ', n:5, ' - ', dec, #32, bin.Reverse);
end;
end;
end.
Потому, что выведено будет 8 16 32 64 128 256 512.
Т. е. 7 значений.
Т. е. 7 значений.
Объясните, почему число ноль не будет учитываться при подсчете различных чисел, например для числа 25 будет: на первом шаге алгоритма двоичная запись 11001, на втором шаге алгоритма 11001, на третьем шаге алгоритма 25, на четвертом шаге алгоритма автомат вернет разность 25-25 = 0.
Откуда это следует из условия задачи? Спасибо.
Откуда это следует из условия задачи? Спасибо.
Похожие вопросы
- Объясните подробно задачу 1 и постройте алгоритм решения
- (Паскаль) Написать программу для вычисления функции y= x+1 при x<6 ; 2*x-1 при x>=0
- Задачки по информатике, 7 класс. Python.
- Можете разжевать о чëм здесь идëт речь. Объяснить более простым языком.
- Объясните пожалуйста тему, не было на уроке!
- 7 КЛАСС ИНФОРМАТИКА, ДВОИЧНОЕ КОДИРОВАНИЕ Расскажите всё о двоичном кодировании на уровне 7 класса.
- Решите информатика 7 класс
- Найди десятичные числа, не превосходящие 100, запись которых в системе счисления с основанием 7 оканчивается на 11.
- Задача 6. непонятные числа.
- Разноэтажный дом Ограничение по времени: 1 секунда Архитекторы — люди творческие: иногда они создают
//if not (n - dec in ns) then begin
ns += [(n - dec)];
writeln((n - dec):4, ': ', n:5, ' - ', dec, #32, bin.Reverse);
//end;