Есть 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();
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д