Есть 12 скобок. Подсчитать и напечатать все синтаксически верные варианты - C#
Формулировка задачи:
пример синтаксически верного варианта: ()()()()()(),(((((())))))
пример синтаксически неверного варианта: )()()()()()(,))))))((((((
надо просчитать все варианты и выдать пользователю число верных/неверных вариантов
вот что я написал
я заменил скобки числами 0-'(' 1-')' и написал 12 циклов под каждую скобку потом брал открывающую скобку и искал ей закрывающую если находил то удалял их и добавлял переменной y единичку потом после проверке проверял y если он равен 6 тогда вариант правильный если нет неправильный
программа перестает отвечать на около 000001111111
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;
}
}
}
}
}Решение задачи: «Есть 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();
}
}
}