Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
jambas92
58 / 57 / 3
Регистрация: 18.11.2010
Сообщений: 315
#1

найти ошибку в задаче шахматы - C++

11.09.2011, 13:37. Просмотров 548. Ответов 7
Метки нет (Все метки)

здравствуйте! не могу найти ошибку в своем решений. у кого какие идеи? условие задачи:

Азиз и Иван решили поиграть в шахматы. Однако у них не нашлось целой шахматной доски, поэтому Иван склеил ее из нескольких кусков. Каждый кусок вырезан из правильной шахматной доски. Однако Азиз считает что на полученной доске просто невозможно играть в шахматы. Поэтому вместо игры в шахматы они решили выяснить — а из какого минимального количества кусков шахматной доски Иван мог склеить эту доску. Помогите им!

Формат входных данных:
Стандартный поток ввода содержит восемь строк, состоящие из восьми символов «W» и «B», не разделенных пробелами. Символ «W» обозначает белую клетку, а символ «B» — черную.
Формат выходных данных:
Стандартный поток вывода должен содержать одно число — минимальное количество кусков, из которых могла быть склеена заданная доска.

пример:
вход:
WBWBWBBW
BWBBWBWB
WBWWBWBW
WBWWBWWB
BWBBWBWB
WBWBWWBW
BWBWBBWB
WBWBWWBW

выход: 4

мой код:

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
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    char mas[8][8];
    int count1=0;
    int count2=0;
    int yaya;
 
    for (int i=0; i<8; i++)
    {
        for (int j=0; j<8; j++)
        {
            cin >> mas[i][j];
        }
    }
 
    for (int i1=0, j2=0; i1<8, j2<7; i1++, j2++)
    {
        if (mas[0][i1]==mas[0][j2+1])
        {
            count1++;
        }
    }
 
    for (int i1=0, j2=0; i1<8, j2<7; i1++, j2++)
    {
        if (mas[1][i1]==mas[1][j2+1])
        {
            count1++;
        }
    }
 
    for (int i1=0, j2=0; i1<8, j2<7; i1++, j2++)
    {
        if (mas[2][i1]==mas[2][j2+1])
        {
            count1++;
        }
    }
 
    for (int i1=0, j2=0; i1<8, j2<7; i1++, j2++)
    {
        if (mas[3][i1]==mas[3][j2+1])
        {
            count1++;
        }
    }
 
    for (int i1=0, j2=0; i1<8, j2<7; i1++, j2++)
    {
        if (mas[4][i1]==mas[4][j2+1])
        {
            count1++;
        }
    }
 
    for (int i1=0, j2=0; i1<8, j2<7; i1++, j2++)
    {
        if (mas[5][i1]==mas[5][j2+1])
        {
            count1++;
        }
    }
 
    for (int i1=0, j2=0; i1<8, j2<7; i1++, j2++)
    {
        if (mas[6][i1]==mas[6][j2+1])
        {
            count1++;
        }
    }
 
    for (int i1=0, j2=0; i1<8, j2<7; i1++, j2++)
    {
        if (mas[7][i1]==mas[7][j2+1])
        {
            count1++;
        }
    }
 
    //
 
    for (int i1=0, j2=0; i1<8, j2<7; i1++, j2++)
    {
        if (mas[i1][0]==mas[j2+1][0])
        {
            count2++;
        }
    }
 
    for (int i1=0, j2=0; i1<8, j2<7; i1++, j2++)
    {
        if (mas[i1][1]==mas[j2+1][1])
        {
            count2++;
        }
    }
 
    for (int i1=0, j2=0; i1<8, j2<7; i1++, j2++)
    {
        if (mas[i1][2]==mas[j2+1][2])
        {
            count2++;
        }
    }
 
    for (int i1=0, j2=0; i1<8, j2<7; i1++, j2++)
    {
        if (mas[i1][3]==mas[j2+1][3])
        {
            count2++;
        }
    }
 
    for (int i1=0, j2=0; i1<8, j2<7; i1++, j2++)
    {
        if (mas[i1][4]==mas[j2+1][4])
        {
            count2++;
        }
    }
 
    for (int i1=0, j2=0; i1<8, j2<7; i1++, j2++)
    {
        if (mas[i1][5]==mas[j2+1][5])
        {
            count2++;
        }
    }
 
    for (int i1=0, j2=0; i1<8, j2<7; i1++, j2++)
    {
        if (mas[i1][6]==mas[j2+1][6])
        {
            count2++;
        }
    }
 
    for (int i1=0, j2=0; i1<8, j2<7; i1++, j2++)
    {
        if (mas[i1][7]==mas[j2+1][7])
        {
            count2++;
        }
    }
 
    cout << abs(count1- count2);
 
    return 0;
 
}
p/s: не судите за стиль моего программирования, знаю код можно написать куда компактнее и красивее.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.09.2011, 13:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос найти ошибку в задаче шахматы (C++):

Найти ошибку в задаче - C++
Подскажите где ошибка (не выводит второй prosmotr): #include &lt;iostream&gt; using namespace std; struct spisok { char file;...

Немогу найти ошибку в задаче( - C++
Дана задача: вылислить (b*cos(b^4+modul(z^1/3))+sin^2(a+b-c)*pi^4)/(cos(z)+modul(ctg(c))) #include &quot;stdio.h&quot; #include &quot;math.h&quot; ...

Помогите найти ошибку в задаче на структуры - C++
Помогите , 1 ошибка в коде , код писал с книги . Буду очень благодарен за помощь. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; ...

Найти ошибку в задаче на файловый ввод/вывод (задача про МКАД) - C++
Длина Московской кольцевой автомобильной дороги —109 километров. Байкер Вася стартует с первого километра МКАД и едет со скоростью V...

я решил задачу про шахматы посмотрите ошибку - C++
#include&lt;iostream&gt; using namespace std; int main() { int gorizontal, vertikal, a, b, c, d; int x1, y1, x2,...

Калькулятор Z-1. Укажите на ошибку в программе к задаче - C++
Уважаемые форумчане, укажите пожалуйста на ошибку в программе. Пишу программу к задаче, валится на 10 тесте (Wrong Answer)....

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
jambas92
58 / 57 / 3
Регистрация: 18.11.2010
Сообщений: 315
11.09.2011, 13:47  [ТС] #2
это пример входного и выходного примера в графическом виде
найти ошибку в задаче шахматы
0
valeriikozlov
Эксперт C++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
11.09.2011, 14:24 #3
jambas92, ссылку на задачу можете дать?

Добавлено через 20 минут
Предварительно могу сказать только:
тест:
WWWWWWWW
WWWWWWWW
WWWWWWWW
WWWWWWWW
WWWWWWWW
WWWWWWWW
WWWWWWWW
WWWWWWWW

Ваш код дает ответ - 0.
По моему должно быть - 64.
И я эту задачу совсем бы по другому решал.
0
jambas92
58 / 57 / 3
Регистрация: 18.11.2010
Сообщений: 315
11.09.2011, 14:46  [ТС] #4
valeriikozlov, да точно. поделитесь алгоритмом????

Добавлено через 1 минуту
acm.iitu.kz
0
valeriikozlov
Эксперт C++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
11.09.2011, 15:21 #5
jambas92, так я и не смог добраться до сдачи задачи. Поэтому проверяйте сами:
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
#include <iostream>
#include <cmath>
using namespace std;
int main()
{ 
    char mas[8][8];
        int mas1[8][8];
        int tmp=0, i, j;
 
        for (i=0; i<8; i++)
        {
                for (j=0; j<8; j++)
                {
                        cin >> mas[i][j];
                        mas1[i][j]=0;
                }
        }
        while(true)
        {
            bool fl=true;
            for(i=0; i<8 && fl; i++)
                for(j=0; j<8; j++)
                    if(mas1[i][j]==0)
                    {
                        tmp++;
                        mas1[i][j]=tmp;
                        fl=false;
                        break;
                    }
            if(fl)
                break;
            while(!fl)
            {
                fl=true;
                for(i=0; i<8; i++)
                    for(j=0; j<8; j++)
                        if(mas1[i][j]==tmp)
                        {
                            if(mas[i][j]=='W')
                            {
                                if(i>0 && mas1[i-1][j]==0 && mas[i-1][j]=='B')
                                {
                                    fl=false;
                                    mas1[i-1][j]=tmp;
                                }
                                if(i<7 && mas1[i+1][j]==0 && mas[i+1][j]=='B')
                                {
                                    fl=false;
                                    mas1[i+1][j]=tmp;
                                }
                                if(j>0 &&  mas1[i][j-1]==0 && mas[i][j-1]=='B')
                                {
                                    fl=false;
                                    mas1[i][j-1]=tmp;
                                }
                                if(j<7 &&  mas1[i][j+1]==0 && mas[i][j+1]=='B')
                                {
                                    fl=false;
                                    mas1[i][j+1]=tmp;
                                }
                            }
                            else
                            {
                                if(i>0 && mas1[i-1][j]==0 && mas[i-1][j]=='W')
                                {
                                    fl=false;
                                    mas1[i-1][j]=tmp;
                                }
                                if(i<7 && mas1[i+1][j]==0 && mas[i+1][j]=='W')
                                {
                                    fl=false;
                                    mas1[i+1][j]=tmp;
                                }
                                if(j>0 &&  mas1[i][j-1]==0 && mas[i][j-1]=='W')
                                {
                                    fl=false;
                                    mas1[i][j-1]=tmp;
                                }
                                if(j<7 &&  mas1[i][j+1]==0 && mas[i][j+1]=='W')
                                {
                                    fl=false;
                                    mas1[i][j+1]=tmp;
                                }   
                            }
                        }
            }
        }    
        cout << tmp;
 
        return 0;
 
}
2
jambas92
58 / 57 / 3
Регистрация: 18.11.2010
Сообщений: 315
11.09.2011, 17:45  [ТС] #6
valeriikozlov, ответ верный, спасибо. не могли бы Вы разъяснить задачу???
0
valeriikozlov
Эксперт C++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
11.09.2011, 18:07 #7
Цитата Сообщение от jambas92 Посмотреть сообщение
не могли бы Вы разъяснить задачу???
По-моему это называется раскраской графа (но может быть я и ошибаюсь).
В общем так:
1) Сначало массив mas1[8][8] обнуляем.
2) Потом ищем первое значение в mas1[8][8] которое равно 0. (ищем неокрашенную точку). Присваиваем ей значение tmp (которое перед этим увеличили). Если такого значения не нашли, выходим из первого цикла.
3) Затем ищем во втором цикле все точки, которые неокрашенные, но подходящие под кусок текущей шахматной доски (это кусок доски, значения которой в mas1[][] равны tmp) и окрашиваем их тоже (присваиваем значение tmp).
4) Переходим к п. 2

По окончании первого цикла выводим значение tmp - это и есть ответ.
1
jambas92
58 / 57 / 3
Регистрация: 18.11.2010
Сообщений: 315
11.09.2011, 18:54  [ТС] #8
valeriikozlov гениально! спасибо большое!!!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.09.2011, 18:54
Привет! Вот еще темы с ответами:

Не хватает опыта для того, чтобы понять ошибку в задаче циклического побитового сдвига - C++
Доброго времени суток! Помогите пожалуйста разобраться, почему вместо заданных мною, скажем 4 символов, после циклического сдвига он выдаёт...

Шахматы: найти количество путей для попадания в точку n - C++
Напишите пожалуйста программу,а то сам С++ почти не знаю,а скоро сдавать. Шахматная фигура может двигаться на 1 шаг,на 2 или на 3. найти...

Найдите ошибку в задаче: "дана матрица, если выполняется условие, то следует исполнить преобразование.." - C++
// labar4.cpp : main project file. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;string.h&gt; #include...

Найти ошибки в задаче с перегрузками функций - C++
Помогите, пожалуйста, определить, где здесь ошибка:cry: Никак не могу найти.. Буду очень благодарна! #include &lt;iostream&gt; ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
11.09.2011, 18:54
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru