Есть 12 скобок. Подсчитать и напечатать все синтаксически верные варианты - C#

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

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

пример синтаксически верного варианта: ()()()()()(),(((((()))))) пример синтаксически неверного варианта: )()()()()()(,))))))(((((( надо просчитать все варианты и выдать пользователю число верных/неверных вариантов вот что я написал
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace DZ
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        //0-открывающая 1-закрывающая
        string st = "";
        int x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12;
        int b;
        int y;
        int chislopar=0;
        int pr = 0,nepr=0;
        private void button1_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < 2; i++)
            {
                x1 = i;
                for (int q = 0; q < 2; q++)
                {
                    x2 = q;
                    for (int w = 0; w < 2; w++)
                    {
                        x3 = w;
                        for (int r  = 0; r < 2; r++)
                        {
                            x4 = r;
                            for (int t = 0; t < 2; t++)
                            {
                                x5 = t;
                                for (int y = 0; y < 2; y++)
                                {
                                    x6 = y;
                                    for (int u = 0; u < 2; u++)
                                    {
                                        x7 = u;
                                        for (int o = 0; o < 2; o++)
                                        {
                                            x8 = o;
                                            for (int p = 0; p < 2; p++)
                                            {
                                                x9 = p;
                                                for (int a = 0; a < 2; a++)
                                                {
                                                    x10 = a;
                                                    for (int s = 0; s < 2; s++)
                                                    {
                                                        x11 = s;
                                                        for (int d = 0; d < 2; d++)
                                                        {
                                                            x12 = d;
                                                            st=x1.ToString()+x2.ToString()+x3.ToString()+x4.ToString()+x5.ToString()+x6.ToString()+x7.ToString()+x8.ToString()+x9.ToString()+x10.ToString()+x11.ToString()+x12.ToString();
                                                            string st1 = st;
                                                            b++;
                                                            
                                                            for (int f = 0; f < st1.Length; f++)
                                                            {
                                                                if (st1[f] == '0'||f!=11)
                                                                    for (int f1 = f + 1; f1 < st1.Length; f1++)
                                                                    {
                                                                        if (st1[f1] == '1')
                                                                        {
                                                                            st1 = st1.Remove(f1, 1);
                                                                            st1 = st1.Remove(f, 1);
                                                                            y++;
                                                                            
                                                                            break;
                                                                        }
                                                                    }
                                                                if (st1 == "")
                                                                {
                                                                    break;
                                                                }
                                                            }
                                                            
                                                            if (y == 6)
                                                            {
                                                                int n=0;
                                                                n++;
                                                                textBox2.Text = n.ToString();
                                                                //listBox1.Items.Add(st + ":синтаксически верно");
                                                            }
                                                            else
                                                            {
                                                                //listBox1.Items.Add(st + ":синтаксически неверно");
                                                            }
                                                            y = 0;
                                                        }
                                                    }
                                                }
                                            }
                                        }
я заменил скобки числами 0-'(' 1-')' и написал 12 циклов под каждую скобку потом брал открывающую скобку и искал ей закрывающую если находил то удалял их и добавлял переменной y единичку потом после проверке проверял y если он равен 6 тогда вариант правильный если нет неправильный программа перестает отвечать на около 000001111111

Решение задачи: «Есть 12 скобок. Подсчитать и напечатать все синтаксически верные варианты»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace NETExperiments
{
    class Program
    {
        static void Main(string[] args)
        {
            string source = "()()()()()(),(((((())))))";
            int correctCounter = 0;
            int incorrectCounter = 0;
            Stack<char> brackets = new Stack<char>();
 
            foreach (char c in source)
            {
                if (c == '(' || c == ')')
                {
                    if (!brackets.Any() || brackets.Peek() == c || c == '(')
                    {
                        brackets.Push(c);
                    }
                    else
                    {
                        if (c == ')' && brackets.Peek() == '(')
                        {
                            correctCounter++;
                            brackets.Pop();
                        }
                    }
                }
            }
 
            incorrectCounter += brackets.Count;
 
            Console.WriteLine("Correct count  : " + correctCounter);
            Console.WriteLine("Incorrect count: " + incorrectCounter);
 
            Console.ReadKey();
        }
    }
}

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


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

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

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