Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 22.01.2017
Сообщений: 32

Скрытая ошибка в алгоритме

27.01.2017, 04:47. Показов 1467. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем. Я тут всю ночь не спал - укреплял свои навыки программирования. Задался сделать программу "Фортуна" называется. Просто игра, в которой выпадают числа и собирается комбинация. Вроде бы всё сделал, но появилась ошибка при проверке, которую я не знаю как исправить. Просто не хватает опыта. Помогите кто может пожалуйста. Ошибка в комбинации двух пар. Вот кодик:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
        static void Game()
        {
            Random random = new Random();
            int[] slot = new int[5];
            do
            {
                Console.Clear();
                for (int i = 0; i < slot.Length; ++i)
                {
                    slot[i] = random.Next(1, 9);
                    Console.Write("{0} ", slot[i]);
                }
                Console.WriteLine();
                int a = 0;
                int b = 0;
 
                // Комбинации
                #region Пятёрки и четвёрки
                for (int c = 0; c < slot.Length; ++c)
                {
                    for (int d = 0; d < slot.Length; ++d)
                    {
                        if (slot[c] == slot[d])
                        {
                            a++;
                        }
                    }
                    if (a == 5 | a == 4) break;
                    else a = 0;
                }
                if (a == 5)
                {
                    Console.WriteLine("Пятёрка!");
                    continue;
                }
                if (a == 4)
                {
                    Console.WriteLine("Четвёрка!");
                    continue;
                }
                #endregion
                #region Полный дом
                for (int c = 0; c < slot.Length; ++c)
                {
                    for (int d = 0; d < slot.Length; ++d)
                    {
                        if (slot[c] == slot[d])
                        {
                            a++;
                        }
                    }
                    if (a == 3) 
                    {
                        for (int e = 0; e < slot.Length; ++e)
                        {
                            for (int f = 0; f < slot.Length; ++f)
                            {
                                if ((slot[e] != slot[c]) & (slot[e] == slot[f]))
                                {
                                    b++;
                                }
                            }
                            if (b == 2) break;
                            else b = 0;
                        }
                    }
                    else a = 0;
                    break;
                }
                if (a == 3 & b == 2)
                {
                    Console.WriteLine("Полный дом!");
                    continue;
                }
                #endregion
                #region Тройка
                for (int c = 0; c < slot.Length; ++c)
                {
                    for (int d = 0; d < slot.Length; ++d)
                    {
                        if (slot[c] == slot[d])
                        {
                            a++;
                        }
                    }
                    if (a == 3) break;
                    else a = 0;
                }
                if (a == 3)
                {
                    Console.WriteLine("Тройка!");
                    continue;
                }
                #endregion
                #region Две пары
                for (int c = 0; c < slot.Length; ++c)
                {
                    for (int d = 0; d < slot.Length; ++d)
                    {
                        if (slot[c] == slot[d])
                        {
                            a++;
                        }
                    }
                    if (a == 2)
                    {
                        for (int e = 0; e < slot.Length; ++e)
                        {
                            for (int f = 0; f < slot.Length; ++f)
                            {
                                if ((slot[e] != slot[c]) & (slot[e] == slot[f]))
                                {
                                    b++;
                                }
                            }
                            if (b == 2) break;
                            else b = 0;
                        }
                    }
                    else a = 0;
                    break;
                }
                if (a == 2 & b == 2)
                {
                    Console.WriteLine("Две пары!");
                    continue;
                }
                #endregion
                #region Пара
                for (int c = 0; c < slot.Length; ++c)
                {
                    for (int d = 0; d < slot.Length; ++d)
                    {
                        if (slot[c] == slot[d])
                        {
                            a++;
                        }
                    }
                    if (a == 2) break;
                    else a = 0;
                }
                if (a == 2)
                {
                    Console.WriteLine("Пара!");
                    continue;
                }
                #endregion
                #region Без выигрыша
                    Console.WriteLine("Без выигрыша!");
                #endregion
 
            } while (Console.ReadKey().Key == ConsoleKey.Enter);
        }
Добавлено через 1 минуту
Ошибка заключается в том, что когда первое число не равно остальным. А остальные являются двумя парами, например 14488, то показывается комбинация "Пара!", а не "Две пары!". У меня неправильный алгоритм, но к другому я ещё не пришёл. Всю ночь потратил, чтобы даже до этого додуматься.

Добавлено через 8 минут
Немного изменил код. Добавил a = 0 и b = 0, после каждой комбинации. Пока ищу, может быть это была ошибка.
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
        static void Game()
        {
            Random random = new Random();
            int[] slot = new int[5];
            do
            {
                Console.Clear();
                for (int i = 0; i < slot.Length; ++i)
                {
                    slot[i] = random.Next(1, 9);
                    Console.Write("{0} ", slot[i]);
                }
                Console.WriteLine();
                int a = 0;
                int b = 0;
 
                // Комбинации
                #region Пятёрки и четвёрки
                for (int c = 0; c < slot.Length; ++c)
                {
                    for (int d = 0; d < slot.Length; ++d)
                    {
                        if (slot[c] == slot[d])
                        {
                            a++;
                        }
                    }
                    if (a == 5 | a == 4) break;
                    else a = 0;
                }
                if (a == 5)
                {
                    a = 0;
                    b = 0;
                    Console.WriteLine("Пятёрка!");
                    continue;
                }
                a = 0;
                b = 0;
                if (a == 4)
                {
                    a = 0;
                    b = 0;
                    Console.WriteLine("Четвёрка!");
                    continue;
                }
                a = 0;
                b = 0;
                #endregion
                #region Полный дом
                for (int c = 0; c < slot.Length; ++c)
                {
                    for (int d = 0; d < slot.Length; ++d)
                    {
                        if (slot[c] == slot[d])
                        {
                            a++;
                        }
                    }
                    if (a == 3) 
                    {
                        for (int e = 0; e < slot.Length; ++e)
                        {
                            for (int f = 0; f < slot.Length; ++f)
                            {
                                if ((slot[e] != slot[c]) & (slot[e] == slot[f]))
                                {
                                    b++;
                                }
                            }
                            if (b == 2) break;
                            else b = 0;
                        }
                    }
                    else a = 0;
                    break;
                }
                if (a == 3 & b == 2)
                {
                    a = 0;
                    b = 0;
                    Console.WriteLine("Полный дом!");
                    continue;
                }
                a = 0;
                b = 0;
                #endregion
                #region Тройка
                for (int c = 0; c < slot.Length; ++c)
                {
                    for (int d = 0; d < slot.Length; ++d)
                    {
                        if (slot[c] == slot[d])
                        {
                            a++;
                        }
                    }
                    if (a == 3) break;
                    else a = 0;
                }
                if (a == 3)
                {
                    a = 0;
                    b = 0;
                    Console.WriteLine("Тройка!");
                    continue;
                }
                a = 0;
                b = 0;
                #endregion
                #region Две пары
                for (int c = 0; c < slot.Length; ++c)
                {
                    for (int d = 0; d < slot.Length; ++d)
                    {
                        if (slot[c] == slot[d])
                        {
                            a++;
                        }
                    }
                    if (a == 2)
                    {
                        for (int e = 0; e < slot.Length; ++e)
                        {
                            for (int f = 0; f < slot.Length; ++f)
                            {
                                if ((slot[e] != slot[c]) & (slot[e] == slot[f]))
                                {
                                    b++;
                                }
                            }
                            if (b == 2) break;
                            else b = 0;
                        }
                    }
                    else a = 0;
                    break;
                }
                if (a == 2 & b == 2)
                {
                    a = 0;
                    b = 0;
                    Console.WriteLine("Две пары!");
                    continue;
                }
                a = 0;
                b = 0;
                #endregion
                #region Пара
                for (int c = 0; c < slot.Length; ++c)
                {
                    for (int d = 0; d < slot.Length; ++d)
                    {
                        if (slot[c] == slot[d])
                        {
                            a++;
                        }
                    }
                    if (a == 2) break;
                    else a = 0;
                }
                if (a == 2)
                {
                    a = 0;
                    b = 0;
                    Console.WriteLine("Пара!");
                    continue;
                }
                a = 0;
                b = 0;
                #endregion
                #region Без выигрыша
                Console.WriteLine("Без выигрыша!");
                #endregion
 
            } while (Console.ReadKey().Key == ConsoleKey.Enter);
        }


Добавлено через 2 минуты
Нет, не то. Всё ещё, если первое число не совпадает с остальными 25588, то показывается, что пара. Не знаю что это. Ладно, я пойду отдыхать.

Добавлено через 9 минут
Я не смогу уснуть, пока не решу Придётся заново алгоритм выдумывать. Просто я хочу сделать без встроенных функций массива на подобие Array.sort(); Потому что я ничему не научусь. А я ведь такую силу почувствовал. Будет обидно, что я написал правильный код, но ошибся с каким-нибудь break или условии

Добавлено через 2 минуты
По идее, мой цикл должен проходить и сравнивать все числа в массиве. По другому никак. Но может быть я что-то не понимаю... Дальше идут сравнения на количество одинаковых чисел. Всё хорошо, если пара есть у первого числа и дальше у остальных чисел. Тогда ошибок не возникает. Но, когда первое число бесхозное, то дальше, если есть две пары или полный дом, то показывается либо пара, либо тройка. Не могу сообразить, с чем это связано.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.01.2017, 04:47
Ответы с готовыми решениями:

Простой код, простая, но для меня скрытая ошибка
using System; using System.IO; using System.Linq; using System.Collections.Generic; namespace CSharp_Shell { public...

Ошибка в алгоритме сортировки бинарным деревом
Ребят помогите пж, препод задал сделать сортировку с помощью двоичного дерева, все есть и готовое. Сортировка работает и перемещает цифры...

Логическая ошибка в алгоритме нахождения точек циссоиды
Здравствуйте, товарищи. Нужно построить график циссоиды. Здесь я получаю точки циссоиды, но что-то пошло не так и цикл уходи в...

21
0 / 0 / 0
Регистрация: 22.01.2017
Сообщений: 32
28.01.2017, 03:30  [ТС]
Студворк — интернет-сервис помощи студентам
Так
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
        static void Game()
        {
            Random random = new Random();
 
            int[] slot = new int[5];
 
            int numbersCount = 0;
            int numA = 0;
            int numB = 0;
 
            do
            {
                bool five = false;
                bool four = false;
                bool fullHouse = false;
                bool three = false;
                bool ladder = false;
                bool twoPair = false;
                bool onePair1 = false;
                bool onePair2 = false;
                bool nothing = false;
 
                five = false;
                four = false;
                fullHouse = false;
                three = false;
                ladder = false;
                twoPair = false;
                onePair1 = false;
                onePair2 = false;
                numA = 0;
                numB = 0;
 
                //while (!three)
                //{
                    five = false;
                    four = false;
                    fullHouse = false;
                    three = false;
                    ladder = false;
                    twoPair = false;
                    onePair1 = false;
                    onePair2 = false;
                    nothing = false;
                    numA = 0;
                    numB = 0;
 
                    Console.Clear();
 
                    for (int a = 0; a < slot.Length; ++a)
                    {
                        slot[a] = random.Next(1, 6);
                        Console.Write("{0} ", slot[a]);
                    }
 
                    Console.WriteLine();
 
                    // КОМБИНАЦИИ
 
                    //----------
                    #region Пятёрка
                    for (int a = 0; a < slot.Length; ++a)
                    {
                        for (int b = 0; b < slot.Length; ++b)
                        {
                            if (slot[a] == slot[b]) numbersCount++;
                        }
                        if (numbersCount == 5)
                        {
                            five = true;
                            break;
                        }
                        else numbersCount = 0;
                    }
                    if (five)
                    {
                        Console.WriteLine("Пятёрка!");
                        numbersCount = 0; // Вот тут правильно.
                        continue;
                    }
                    numbersCount = 0;
                    #endregion
                    //----------
                    #region Четвёрка
                    for (int a = 0; a < slot.Length; ++a)
                    {
                        for (int b = 0; b < slot.Length; ++b)
                        {
                            if (slot[a] == slot[b]) numbersCount++;
                        }
                        if (numbersCount == 4)
                        {
                            four = true;
                            break;
                        }
                        else numbersCount = 0;
                    }
                    if (four)
                    {
                        Console.WriteLine("Четвёрка!");
                        numbersCount = 0;
                        continue;
                    }
                    numbersCount = 0;
                    #endregion
                    //----------
                    #region Полный дом
                    for (int a = 0; a < slot.Length; ++a)
                    {
                        for (int b = 0; b < slot.Length; ++b)
                        {
                            if (slot[a] == slot[b]) numbersCount++;
                        }
                        if (numbersCount == 3)
                        {
                            three = true;
                            break;
                        }
                        else numbersCount = 0;
                    }
                    for (int a = 0; a < slot.Length; ++a)
                    {
                        for (int b = 0; b < slot.Length; ++b)
                        {
                            if (slot[a] == slot[b]) numbersCount++;
                        }
                        if (numbersCount == 2)
                        {
                            onePair1 = true;
                            break;
                        }
                        else numbersCount = 0;
                    }
                    if (three && onePair1)
                    {
                        fullHouse = true;
                        Console.WriteLine("Полный дом!");
                        numbersCount = 0;
                        three = false;
                        onePair1 = false;
                        continue;
                    }
                    numbersCount = 0;
                    three = false;
                    onePair1 = false;
                    #endregion
                    //----------
                    #region Тройка
                    for (int a = 0; a < slot.Length; ++a)
                    {
                        for (int b = 0; b < slot.Length; ++b)
                        {
                            if (slot[a] == slot[b]) numbersCount++;
                        }
                        if (numbersCount == 3)
                        {
                            three = true;
                            break;
                        }
                        else numbersCount = 0;
                    }
                    if (three)
                    {
                        Console.WriteLine("Тройка!");
                        numbersCount = 0;
                        continue;
                    }
                    numbersCount = 0;
                    #endregion
                    //----------
                    #region Две пары
                    for (int a = 0; a < slot.Length; ++a)
                    {
                        for (int b = 0; b < slot.Length; ++b)
                        {
                            if (slot[a] == slot[b]) numbersCount++;
                        }
                        if (numbersCount == 2)
                        {
                            numA = slot[a];
                            break;
                        }
                        else numbersCount = 0;
                    }
                    if (numbersCount == 2) onePair1 = true;
 
                    for (int a = 0; a < slot.Length; ++a)
                    {
                        for (int b = 0; b < slot.Length; ++b)
                        {
                            if (numA != slot[a])
                            {
                                if (slot[a] == slot[b]) numbersCount++;
                            }
                        }
                        if (numbersCount == 2)
                        {
                            numB = slot[a];
                            break;
                        }
                        else numbersCount = 0;
                    }
                    if (numbersCount == 2) onePair2 = true;
 
                    if ((onePair1 && onePair2) && (numA != numB))
                    {
                        twoPair = true;
                        Console.WriteLine("Две пары!");
                        numbersCount = 0;
                        onePair1 = false;
                        onePair2 = false;
                        continue;
                    }
                    numbersCount = 0;
                    onePair1 = false;
                    #endregion
                    //----------
                    #region Пара
                    for (int a = 0; a < slot.Length; ++a)
                    {
                        for (int b = 0; b < slot.Length; ++b)
                        {
                            if (slot[a] == slot[b]) numbersCount++;
                        }
                        if (numbersCount == 2)
                        {
                            onePair1 = true;
                            break;
                        }
                        else numbersCount = 0;
                    }
                    if (onePair1)
                    {
                        Console.WriteLine("Пара!");
                        numbersCount = 0;
                        continue;
                    }
                    numbersCount = 0;
                    onePair1 = false;
                    #endregion
                    //----------
                //}
            } while (Console.ReadKey().Key == ConsoleKey.Enter);
        }
0
Эксперт .NET
 Аватар для Usaga
14370 / 9471 / 1360
Регистрация: 21.01.2016
Сообщений: 35,739
28.01.2017, 05:19
Будущее, пользуйся отладчиком, чтобы посмотреть что у тебя происходит в коде.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.01.2017, 05:19

Ошибка в алгоритме преобразования выражения в обратную польскую запись
Метод OPLConvert принимает выражение в виде строки, например &quot;2+2*2&quot;. Пока что без учета приоритета операторов хочу чтобы мне мой метод...

Ошибка в алгоритме метода ветвей и границ - на некоторых графах программа зависает
Добрый день! Ошибка в алгоритме, метод ветвей и границ - поиск минимального пути в графе. На некоторых графах работает, на некоторых нет -...

Ошибка в алгоритме чтения
У меня есть такой код: private void button4_Click(object sender, EventArgs e) // Загр. из файла { ...

RMS - есть ли скрытая сборка?
На днях подумал - а как &quot;типа-хакеры&quot; на видео взламывают школьников? Поискал,почитал,погуглил и нашел рмс. Решил попробовать эту...

Ошибка в алгоритме
Неправильно работает программа есть сетка (координаты x - в векторе A y - в векторе B) надо из известных точек проложить кратчайший...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Новые блоги и статьи
Теория всего 6. Судьба неотвратима?
anaschu 21.07.2026
Математическое доказательство Судьбы: Точка бифуркации в едином тензорном ядре Модели ВсегоСвежее обновление питоновского ядра «Soil Chemistry 2. 0» дало нам неопровержимое математическое. . .
Теория всего 5. ядро Теории Всего: Математический изоморфизм репликаторов и иллюзия свободы воли
anaschu 21.07.2026
Единое ядро Теории Всего: Математический изоморфизм репликаторов и иллюзия свободы воли Главная задача «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы» (аттракторов. . .
сукцессия 37. Внедрил дипсик в свой оркестр из ИИ. У него закончилось пространство чата, потому опубликую выводы из его работы здесь
anaschu 21.07.2026
==================================================================== КОНТЕКСТ: Моделирование микоризной сукцессии (AM → ECM) ==================================================================== . . .
сукцессия 36. Делаю прогоны модели около порога бифуркации (превращения эндо микоризы в экто микоризу)
anaschu 21.07.2026
СУКЦЕССИЯ МИКОРИЗ: КАК МАТЕМАТИКА ОБЪЯСНЯЕТ ПОДЗЕМНУЮ ВОЙНУ Мы привыкли думать, что лес — это деревья. А грибы — это то, что мы собираем в корзинку осенью. Но если заглянуть под землю, окажется,. . .
ИИ и человечность
kumehtar 21.07.2026
Забавно, что общаясь с ИИ, я замечаю, насколько он высказывается умно, и насколько верит в людей. Он умеет прощать. Он знает как отвечать не обесценивая опыт других людей, даже если сам не верит. Он. . .
Нейтральные знания ..., ... чистая наука. Пока что-то проходит модерацию на Хабре, стоит развить мысль ...
Hrethgir 21.07.2026
К таким радикальным взглядам я конечно в той публикации не приходил, но чтобы скоротать вечер, решил углубиться немного. 1. Почему показания термометра заряжены целью? Цель заложена в самом. . .
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru