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