Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.11.2017, 23:46   #1
artems67
Пользователь
 
Регистрация: 17.11.2015
Сообщений: 62
По умолчанию [C#] Выводит один и тот же результат при разных параметрах

Техническое задание:
Даны N целых чисел x1, x2,…,xN. Расставить между ними знак «+» и «-» так, чтобы значение получившегося выражения было равно заданному целому S.

Собственно сделал прогу по "аналогии" из данной темы, но под C#. Но почему-то при разных значениях выводит постоянно 'no', даже когда знаки можно расставить.

Может кто-нибудь поможет разобраться и укажет в какой части косяк? А то я уже и в точь в точь пытался код перенести. Но всё равно работает криво.

Код кнопки для заполнения массива рандомными значениями

Код:
// Global VAR
        int[] a;
        int n;
Код:
private void button2_Click(object sender, EventArgs e) // Заполнение массива случайными числами
        {
            textBox7.Clear(); 
            n = Convert.ToInt32(textBox5.Text); // Ввод N
            a = new int[n];
            Random c = new Random();

            for (int i = 0; i < n; ++i)
            {
                a[i] = c.Next(10);
                textBox7.Text += Convert.ToString(a[i]) + (char)13 + (char)10;
            }
        }
Код кнопки выполнения основной программы

Код:
 private void button3_Click(object sender, EventArgs e) // Выполнение основной части программы
        {
            Boolean bb = false;
            int ss = 0;
            Boolean[] b = new Boolean[50];

            textBox8.Clear();

            int s = Convert.ToInt32(textBox6.Text); // Ввод S

            // FillChar
            for (int i = 0; i < b.Length; i++)
            {
                b[i] = false;
            }

            do
            {
                for (int i = 0; i < n; ++i)
                {
                    if (!b[n])
                    {
                        b[i] = true;
                        break;
                    }
                    else
                    {
                        b[i] = false;
                    }
                }

                    ss = a[0];
                    for (int i = 0; i < n; ++i)
                    {
                        switch (b[i])
                        {
                            case true:
                                ss = ss + a[i];
                                break;

                            case false:
                                ss = ss - a[i];
                                break;
                        }

                    }

                    if (s == ss) 
                    {
                        textBox8.Text += Convert.ToString(a[0]);
                        bb = true;
                        for (int i = 0; i < n; ++i)
                        {
                            switch (b[i])
                            {
                                case true:
                                    textBox8.Text += "+";
                                    break;
                                case false:
                                    textBox8.Text += "-";
                                    break;
                            }
                            textBox8.Text += Convert.ToString(a[i]);
                                

                        }

                    }
                 
                } while (b[n]);


            if (!bb)
            {
                textBox8.Text = "no";
            }

            }
artems67 вне форума Ответить с цитированием
Старый 09.11.2017, 06:36   #2
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Куча мелких недочётов..
Цитата:
Сообщение от artems67 Посмотреть сообщение
Код:
                for (int i = 0; i < n; ++i)
                {
                    if (!b[n])
                    {
                        b[i] = true;
                        break;
                    }
                    else
                    {
                        b[i] = false;
                    }
                }
Проверять-то надо b[i], а не b[n]. И цикл нужен до n включительно
Цитата:
Сообщение от artems67 Посмотреть сообщение
Код:
} while (b[n]);
Должно быть с точностью до наоборот
Black Fregat вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Результат запроса не тот lexflax SQL, базы данных 6 07.06.2013 18:19
Почему один и тот же код не работает на разных IDE Dfence11 Общие вопросы C/C++ 3 14.04.2013 12:56
Массивы - не тот результат. amuleg Общие вопросы C/C++ 6 24.01.2012 14:25
Не тот результат! Dawystrik Общие вопросы Delphi 3 22.03.2009 09:50
как выполнить один и тот же код для двух разных событий puz Общие вопросы Delphi 5 11.05.2007 19:03