Skip to main content

2. Перестановки цифр

Зачёркивание цифры слева от числа означает, что новое число будет остатком от деления исходного числа на 1010 в степени номера старшего разряда.

Например, если число трёхзначное, то для зачёркивания в нём первой слева цифры, необходимо просто взять остаток от его деления на 100100. Т.к. нумерация разрядов начинается с нуля, то нулевому разряду соответствует число единиц, первому - число десятков и т.д.

   int a = scanner.nextInt();
int b = a % 100;

Зачёркиванию первой цифры справа у любого числа, большего 99m, равносильно целочисленному делению этого числа на 1010.

   int a = scanner.nextInt();
int b = a / 10;

Чтобы приписать цифру к числу справа, нужно просто умножить его на 10 и прибавить эту цифру:

   // число
int a = scanner.nextInt();
// цифра
int k = scanner.nextInt();
// результат
int b = a * 10 + k;

А чтобы слева - прибавить эту цифру, умноженную на 1010 в степени, на один большей старшего разряда. Пример для трёхзначного числа:

   // число
int a = scanner.nextInt();
// цифра
int k = scanner.nextInt();
// результат
int b = a + k * 1000;
Рассмотрим задачу

Из трехзначного числа x вычли его последнюю цифру. Когда результат разделили на 1010, а к частному прибавили 1515, то получилось число nn. Найти число xx.

Вычитание из числа его последней цифры с последующим делением его на 1010 равносильно целочисленному делению на 1010.

Построим обратный алгоритм нахождения xx по nn.

Если значение было nn, тогда частное будет равно n15n-15. Это означает, что первые две цифры числа xx как раз и равны n15n-15, а третью цифру мы знаем, тогда можно составить программу:

   // число
int n = scanner.nextInt();
// цифра
int k = scanner.nextInt();
// результат
int r = (n - 15) * 10 + k;

Задание

  1. Из трехзначного числа x вычли его последнюю цифру. Когда результат разделили на 1010, а к частному прибавили 1515, то получилось число nn. Найти число xx, если известно, что последняя цифра была равна kk.
  2. Из трехзначного числа x вычли его первую цифру. Когда результат разделили на 1010, а к частному прибавили 33, то получилось число nn. Найти число xx, если известно, что первую цифра была равна kk.
  3. В трехзначном числе xx зачеркнули первую цифру. Когда оставшееся число умножили на 1010, а произведение сложили с первой цифрой числа xx, то получилось число nn. Найти число xx.
  4. В трехзначном числе xx зачеркнули вторую цифру. Когда оставшееся число умножили на 1010, а произведение сложили с третьей цифрой числа xx, то получилось число nn. Найти число xx. Если известно, что зачёркнутая цифра была равна kk.
  5. Из трехзначного числа xx вычли его последнюю цифру. Когда результат разделили на 1010, а к частному слева приписали последнюю цифру числа xx, то получилось число nn. Найти число nn. По заданному nn найти число xx (значение n вводится с клавиатуры, 10n99910 \leq n \leq 999 и при этом число десятков в nn не равно нулю).
  6. В трехзначном числе xx зачеркнули его вторую цифру. Когда к образованному при этом двузначному числу слева приписали вторую цифру числа xx, то получилось число nn. По заданному nn найти число xx (значение nn вводится с клавиатуры, 100n999100 \leq n \leq 999).
  7. В трехзначном числе xx зачеркнули его последнюю цифру. Когда в оставшемся двузначном числе переставили цифры в обратном порядке, а затем приписали к ним слева последнюю цифру числа xx, то получилось число nn. По заданному nn найти число xx (значение n вводится с клавиатуры, 1n9991 \leq n \leq 999 и при этом число единиц в n не равно нулю).

Ссылка на контест