Решить уравнение - C# (181804)

Узнай цену своей работы

Формулировка задачи:

Написать программу: человек вводит вместо х число, программа показывает все возможны варианты решения(вместо "?" ставит знак "-+*/") если решения нет отобразить этона экране. (((1?2)?3)?4)?5) = x;

Решение задачи: «Решить уравнение»

textual
Листинг программы
using System;
using System.Collections.Generic;
 
public class Program
{
 
   
    private static void Main()
    {
       
        while (true)
        {        
           
            int X ;
            char[] operators = "*/+-".ToCharArray();
            string expression = "(((1?2)?3)?4)?5) = x";
 
            Console.Write("\nВведите Х (ввод символа - выход): ");
 
            if (! Int32.TryParse(Console.ReadLine(),out X))
                 break;
            do
            {
                string[] strarr = expression.Remove(16).Split('?');
                string exp = String.Concat(strarr[0], operators[0], strarr[1], operators[1], strarr[2], operators[2], strarr[3], operators[3], strarr[4]);
                int res = 0;
                res = Evaluate(exp);
                Console.Write(String.Format("{0} = {1}",exp,res));
                if (res != X)
                Console.Write("  Решения нет.");
                Console.WriteLine();
            } while (NextPermutation(operators));
        }
 
        Console.ReadKey(true);
    }
 
  private  static void Swap<T>(ref T x, ref T  y)
    {
 
        T temp = x;
        x = y;
        y = temp;
    }
    private static bool NextPermutation(char[] arr)
    {
        int j = 0, k = 0;
        for (j = arr.Length - 2; j != -1 && arr[j] >= arr[j + 1]; j--) ;
        if (j == -1)
            return false;
        for (k = arr.Length - 1; arr[j] >= arr[k]; k--);
        Swap(ref arr[j], ref arr[k]);
        int left = j + 1;
        Array.Reverse(arr, left, arr.Length - left);
        return true;
    }
 
    private static int Evaluate(string exp)
    {
        Stack<string> stack = new Stack<string>();
        for (int i = 0; i < exp.Length; i++)
        {
            char ch = exp[i];
            if (ch == '(')
                continue;
            else if (ch == ')')
            {
                string right = stack.Pop();
                string op = stack.Pop();
                string left = stack.Pop();
                stack.Push(Calc(left, op, right));
            }
            else if (ch == '+' ||
                 ch == '/' ||
                 ch == '-' ||
                 ch == '*')
                stack.Push(ch.ToString());
            else if (char.IsDigit(ch))
                stack.Push(ch.ToString());
            else
                break;
        }
        return Convert.ToInt32(stack.Peek());
    }
    private static string Calc(string left, string op, string right)
    {
        int l = int.Parse(left);
        int r = int.Parse(right);
        switch (op)
        {
            case "+":
                return (l + r).ToString();
            case "-":
                return (l - r).ToString();
            case "*":
                return (l * r).ToString();
            case "/":
                return (l / r).ToString();
            default:
                throw new ArgumentException();
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.333 из 5
Похожие ответы