Задача: число должно пройти определённое количество действий, чтобы снова стать собой.
Входные данные: число, множитель, количество шагов.
Разрешенные действия: умножать на множитель, убирать любую цифру в числе.
Пример: 9, 2, 8
Результат: 9 18 36 6 12 24 48 96 9
Пример: 2, 3, 5
Результат: 2 6 18 8 24 2
Нужно написать программу, которая будет выполнять данные действия. Что она выдаст при следующих запросах:
1) 26, 2, 9
2) 46, 2, 7
C/C++
Написать программу на любом языке
def f(t, m, n):
if len(t) == n + 1:
if t[0] == t[-1]: print(*t); exit()
else: return
f(t + [t[-1] * m], m, n)
if t[-1] < 10: return
s = str(t[-1])
for v in {s[:i] + s[i + 1:] for i in range(len(s))}: f(t + [int(v)], m, n)
a, b, c = map(int, input().split())
f([a], b, c)
print('Ответа не существует')
Дима Гузенко
Красиво удаляется циферка, я грязновато написал, надо было тоже через Take делать, или через отдельный метод с помощью деления на степень 10-ки. Но у меня тоже работает :)
Игорь Лебедев
Спасибо!
Абы помогло:
internal class Program
{
static bool Iterate(int num, int mul, int step, List<int> list)
{
list.Add(num);
if (step == 0)
{
if (num == list[0])
{
foreach (int i in list)
Console.Write($"{i} ");
return true;
}
list.RemoveAt(list.Count - 1);
return false;
}
if (Iterate(num * mul, mul, step - 1, list))
return true;
List<char> Digits = num.ToString().ToCharArray().ToList();
if (Digits.Count > 1)
for (int i = 0; i < Digits.Count; i++)
{
List<char> CurrentDigits = Digits.Select (x => x).ToList();
CurrentDigits.RemoveAt(i);
int CurNum = int.Parse(new string(CurrentDigits.ToArray()));
if (Iterate(CurNum, mul, step - 1, list))
return true;
}
list.RemoveAt(list.Count - 1);
return false;
}
static void Main(string[] args)
{
int num = int.Parse(Console.ReadLine());
int mul = int.Parse(Console.ReadLine());
int steps = int.Parse(Console.ReadLine());
List<int> list = new List<int>();
if (!Iterate(num, mul, steps, list))
Console.WriteLine("Transformation with specified number of steps is impossible");
Console.ReadLine();
}
}
internal class Program
{
static bool Iterate(int num, int mul, int step, List<int> list)
{
list.Add(num);
if (step == 0)
{
if (num == list[0])
{
foreach (int i in list)
Console.Write($"{i} ");
return true;
}
list.RemoveAt(list.Count - 1);
return false;
}
if (Iterate(num * mul, mul, step - 1, list))
return true;
List<char> Digits = num.ToString().ToCharArray().ToList();
if (Digits.Count > 1)
for (int i = 0; i < Digits.Count; i++)
{
List<char> CurrentDigits = Digits.Select (x => x).ToList();
CurrentDigits.RemoveAt(i);
int CurNum = int.Parse(new string(CurrentDigits.ToArray()));
if (Iterate(CurNum, mul, step - 1, list))
return true;
}
list.RemoveAt(list.Count - 1);
return false;
}
static void Main(string[] args)
{
int num = int.Parse(Console.ReadLine());
int mul = int.Parse(Console.ReadLine());
int steps = int.Parse(Console.ReadLine());
List<int> list = new List<int>();
if (!Iterate(num, mul, steps, list))
Console.WriteLine("Transformation with specified number of steps is impossible");
Console.ReadLine();
}
}
Игорь Лебедев
Спасибо!
Напиши программу телепередач на албанском
напиши конечно
Похожие вопросы
- Написать программу на языке Си
- Написать программу на языке С(просто С).
- Написать программу на языке Си, которая решит эту задачу:
- Написать программу на языке С(С++).
- Напишите программу на языке паскаль
- Написать программу на языке программирования Си.
- Помогите написать программу по теме "Строки" на языке C.
- Написать Программу на языке C++.
- Нужно написать программу на языке C++
- Помогите, пожалуйста, написать программу на языке Си.