Ответы
Ответ:using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main(string[] args)
{
string availableButtons = "237и"; // Доступные кнопки на калькуляторе
int number = 24; // Исходное число
List<string> expressions = GetExpressions(number, availableButtons);
Console.WriteLine($"Возможные варианты представления числа {number}:");
foreach (string expression in expressions)
{
Console.WriteLine(expression);
}
}
static List<string> GetExpressions(int number, string availableButtons)
{
List<string> expressions = new List<string>();
// Генерируем все возможные комбинации кнопок и проверяем их результаты
foreach (string combination in GetCombinations(availableButtons))
{
int result = CalculateResult(combination);
if (result == number)
{
expressions.Add(combination);
}
}
// Сортируем выражения по первому множителю и, при равных первых множителях, по второму множителю
expressions = expressions.OrderBy(e => GetFirstMultiplier(e)).ThenBy(e => GetSecondMultiplier(e)).ToList();
return expressions;
}
static IEnumerable<string> GetCombinations(string availableButtons)
{
// Генерируем все возможные комбинации кнопок рекурсивно
if (availableButtons.Length == 1)
{
yield return availableButtons;
}
else
{
for (int i = 0; i < availableButtons.Length; i++)
{
char button = availableButtons[i];
string remainingButtons = availableButtons.Substring(0, i) + availableButtons.Substring(i + 1);
foreach (string combination in GetCombinations(remainingButtons))
{
yield return button + combination;
}
}
}
}
static int CalculateResult(string expression)
{
int result = 1;
foreach (char button in expression)
{
switch (button)
{
case '2':
result *= 2;
break;
case '3':
result *= 3;
break;
case '7':
result *= 7;
break;
case 'и':
result *= -1;
break;
default:
break;
}
}
return result;
}
static int GetFirstMultiplier(string expression)
{
if (expression.Contains('и'))
{
return CalculateResult(expression.Substring(0, expression.IndexOf('и')));
}
else
{
return CalculateResult(expression);
}
}
static int GetSecondMultiplier(string expression)
{
if (expression.Contains('и'))
{
return CalculateResult(expression.Substring(expression.IndexOf('и') + 1));
}
else
{
return 1;
}
}
}