Возможно, вы заметили, что «все перестановки 0 и 1» - это binary numbers.
Учитывая вход 3, то вывод будет таким:
000, 001, 010, 011, 100, 101, 110 and 111
и они являются номерами 0
, 1
, 2
, 3
, 4
, 5
, 6
и 7
в базе 2 (бинарной).
У вас есть 2 проблемы.
Во-первых, вы должны иметь возможность конвертировать десятичное (базовое 10) целое число (например, 12) в двоичное (12 в двоичном формате - 1100).
И вторая проблема заключается в том, где остановиться с целыми числами. Если вам даны вход 2
, вы выведете 00, 10, 11
и остановитесь. Это от 0 до 3. Учитывая 3
вы выходите 000, 001, 010, 011, 100, 101, 110, 111
- это от 0 до 7.
Есть ли здесь шаблон? Да. Постарайтесь найти способ выяснить, что максимальное десятичное число будет, если ваш вход X.
Base 10 работ по степеням 10, 100 10 1
Base 2 степени 2, 4 2 1
Так что, учитывая вход 5, мы знаем, что будет 5 1
s в качестве последнего номера, 11111
. Что это за число в десятичной форме? Это 2 -1, что 31. С учетом ввода 3, мы знаем, что это будет 111
, который 7 или 2 -1
Поэтому, учитывая любой вход X, мы знаем, что последний число будет Й 1
ы в ряде, и что Х 1
ы будут равны 2 Х -1
Это просто программировать. Просто создать функцию MagicForumulaForCalculatingNumberGivenLength
которая принимает целое число в качестве входных данных (длина) и возвращает десятичное целое число:
function MagicForumulaForCalculatingNumberGivenLength(input:integer):integer; Result := (power(2, input) -1);
Итак, теперь мы знаем, десятичное число, мы должны идти до - для ввода 5 - 31.
Я предполагаю, что вы можете цикл, как это:
readln(Input);
for I := 1 to MagicFormulaForCalculatingNumberGivenLength(Input);
writeln(MagicFormulaForCalculatingBinaryGivenNumber(I));
Так что теперь единственный вопрос заключается в том, чтобы создать двоичное число. It's pretty easy - Я дам вам код в псевдокоде, так что вы можете написать его самостоятельно в паскале:
define DecimalNumberToBinaryString(Input:integer):string;
SBinary: string;
SBinaryRev: string;
while Input > 0 do
SBinary = SBinary + mod(Input,2)
Input = div(Input,2)
SBinaryRev = TextReverse(SBinary);
return SBinary
Я совершенно уверен, что ваш инструктор хочет видеть свою работу, а не наши. Если вы не можете начать свое задание, обратитесь за помощью к своему инструктору; либо они еще не заработали свою зарплату за предоставление образования, или вы не были внимательны в классе. –
Извините, я не хотел, чтобы вы делали домашнее задание. Я попросил вас о помощи, потому что, когда я прошу моего учителя помочь, его ответ «попробуй думать, как программа», и это не пища для меня. – MatFyzak
Извините. Как я уже сказал, мы не здесь, чтобы делать домашнее задание. Ваш учитель ** получает оплату за обучение **. Если вы не понимаете информацию достаточно хорошо, чтобы начать свое задание, ** обратитесь за помощью к своему инструктору ** за помощью. –