• Предмет: Информатика
  • Автор: proggarmer
  • Вопрос задан 4 месяца назад

100 БАЛЛОВ!! Решите задачу на C#

Приложения:

Ответы

Ответ дал: Messip
0

Ответ: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;

       }

   }

}

Вас заинтересует