Другие языки программирования и технологии
Перебрать все числа с цифрами 1 и 2 до n-ного количества цифр.
Как перебрать числа от 1 до, положим, 2222222 (n=7)? Если бы речь шла о конкретном и малом n, можно было бы сделать несколько вложенных циклов, а тут n неизвестное и я уже не знаю, как делать.
program q183776223;
function Convert(n: Integer): Integer;
var
i: Integer;
begin
Result := 0;
i := 0;
repeat
Result := Result + Succ(n mod 2) * Trunc(Exp(Ln(10) * i));
Inc(i);
n := n div 2;
until n = 0;
end;
var
i, n: Integer;
begin
Write('N = ');
ReadLn(n);
i := 0;
while Trunc(Ln(Convert(i)) / Ln(10)) < n do
begin
Write(Convert(i):Succ(n));
Inc(i);
end;
ReadLn;
end.

function Convert(n: Integer): Integer;
var
i: Integer;
begin
Result := 0;
i := 0;
repeat
Result := Result + Succ(n mod 2) * Trunc(Exp(Ln(10) * i));
Inc(i);
n := n div 2;
until n = 0;
end;
var
i, n: Integer;
begin
Write('N = ');
ReadLn(n);
i := 0;
while Trunc(Ln(Convert(i)) / Ln(10)) < n do
begin
Write(Convert(i):Succ(n));
Inc(i);
end;
ReadLn;
end.

Андрей Рязанов
На скрине не хватает, например, 11, 111 и т. д.
Берешь и гонишь некое число от 0 до 2^n.
Его двоичное представление модифицируешь по правилу 0->1 1->2
Собссно все.
Его двоичное представление модифицируешь по правилу 0->1 1->2
Собссно все.
Андрей Рязанов
Я смогу таким образом получить число 112 (001 в двоичном представлении)?
2 нормальных варианта. Первый, в лоб: придумываем некий порядок и операцию перехода от i-го числа к i+1-му. Тут все просто: порядок - по возрастанию, правило перехода - берем самую правую цифру, если 1 - меняем на 2, если 2 - меняем на 1 и смотрим следующую цифру и т. д.. А теперь просто цикл, пока не получим 22...22.
Второй, с небольшой фантазией: замечаем, что между такими n-значными числами и 2-ичными до 2^(n+1) можно установчить взаимно однозначное соответствие, заменив в 2-ичных 0 на 2 (или 0 на 1, а 1 на 2). Надо только написать процедуру перевода - и перебираем 2-ичные в цикле.
Перебирать все числа и выбрасывать неподходящие - очень дорого.
Второй, с небольшой фантазией: замечаем, что между такими n-значными числами и 2-ичными до 2^(n+1) можно установчить взаимно однозначное соответствие, заменив в 2-ичных 0 на 2 (или 0 на 1, а 1 на 2). Надо только написать процедуру перевода - и перебираем 2-ичные в цикле.
Перебирать все числа и выбрасывать неподходящие - очень дорого.
Олег Новиков
Только в голову второй вариант пришел...)))
Андрей Рязанов
Реализовал нечто, вроде варианта "в лоб". Вариант с двоичными числами мне, к слову, приходил в голову, однако в двоичной системе 0001 и 1 - одно и то же, а 1112 и 2, в моём случае, - разные числа. И выходит, что придётся перебирать двоичные числа от 0 до 2^k n раз, заполняя "промежутки" длиной i-k (при i->n) нулями. Муторно, в общем.
Андрей Рязанов
Впрочем, может, я ошибаюсь насчёт "двоичного" метода.
Переводите каждое число в текстовый формат и проверяйте на наличие символов, неравных 1 или 2. И при наличие отрицательного ответа выводить.
стоп стоп стоп. тоесть если н малое то можно было бы сделать несколько вложенных циклов? это еще зачем? если решать задачу совсем в лоб, не думая, то можно обойтись только одним циклом, который будет перебирать вообще все числа, а в теле цикла сделать проверочку, есть ли в этом числе что либо кроме 1 или 2. если нету - число в копилку. конечно работать это будет супердолго. можно элегантнее. например в диапозоне до 100 можно смело взять числа 001, 002,011,012.. и так далее. при этом над будет придумать правило этих подстановок + как то определять самое большое число до этого произвольного n. но формально и в лоб можно решить, чтобы отвязались.
Похожие вопросы
- дано натуральное 5 значное число n.Сколько раз в данном числе встречаются цифры 4 или 8?
- Дано число. Переставить цифры так чтобы образовалось наименьшее.
- Заповнити масив різними числами Армстронга. Числом Армстронга називають натуральне n-цифрове число, сума цифр якого, під
- Найти сумму чисел, заканчивающихся цифрой 4, наибольшее из таких чисел, и номер этого числа в последовательности.
- Как в C++ разбить число на цифры и вывести их через пробел? Решение задачи реализовать с помощью конструкции switch.
- Подсчитать количество 3-значных чисел,сумма цифр которых меньше либо равна 24
- Даны действительные числа а (1),а (2),...а (2n). Получить: а (1),а (2n),а (2),а (2n-1),а (3),...а (n),а (n+1).
- Есть код который находит простые числа. Почему мы проверяем "d*d <= n" ?
- Вопросик по Pascal. Есть переменные A,B,C,D. Как сделать так, чтобы при вводе A выводилось цифра 1, B - 2, C-3, D-4?
- Как можно решить такое задание : " Ввести из клавиатуры шестизначное число, определить цифры, которые находится рядом