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

Задача о симпатичных таблицах - C++

Восстановить пароль Регистрация
 
Nnakhze
0 / 0 / 0
Регистрация: 24.01.2014
Сообщений: 3
24.01.2014, 20:47     Задача о симпатичных таблицах #1
Доброго времени суток.
Прошу помочь с задачей, суть:

Есть таблица N*N, определить, является ли она симпатичной. Симпатичная таблица - та, в которой нет квадратов 2*2, заполненных либо только 0, либо только 1, например
0 0
0 0
или
1 1
1 1.
Входные данные - размер таблицы N.
Выходные данные - YES, если таблица является симпатичной, NO - если не является.

Вот что у меня вышло,
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
#include <iostream>
#include <ctime>
#include <cstdlib>
 
using namespace std;
 
int main()
{
  srand(time(NULL));
  int i = 0, j = 0, n, k = 0;
  int array[n][n];
  cin >> n;
  for (;i<=n-1;i++) { // заполнение таблицы и отображение
    for (j = 0;j<=n-1;j++)
     {
        array[i][j] = rand() % 2;
        cout << array[i][j] << " ";
      }
    cout << endl;
    }
 
 
for(i = 0;i<=n-2;i++)
  {
  for (j = 0;j<=n-2;j++) 
    {
      if ((array[i][j]==0) && (array[i][j+1]==0) && (array[i+1][j]==0) && (array[i+1][j+1]==0)) // проверка на квадраты с 0
    {
 
                     k = k + 1; // подсчет количества симпатичных таблиц
                     cout << "This quadr :" << endl;
                     cout << array[i][j] << " " << array[i][j+1] << endl;
                     cout << array[i+1][j] << " " << array[i+1][j+1] << endl;
                     cout << "..and i[" << i << "] , j [" << j << "] " << endl;
 
               }
      else continue;
 
 
    }
 }
 
for(i = 0;i<=n-2;i++)
  {
  for (j = 0;j<=n-2;j++)
    {
      if ((array[i][j]==1) && (array[i][j+1]==1) && (array[i+1][j]==1) && (array[i+1][j+1]==1))  // проверка на квадраты с 1
        {
 
 
                     k = k + 1; // подсчет количества симпатичных таблиц
                     cout << "This quadr :" << endl;
                     cout << array[i][j] << " " << array[i][j+1] << endl;
                     cout << array[i+1][j] << " " << array[i+1][j+1] << endl;
                     cout << "..and i[" << i << "] , j [" << j << "] " << endl;
 
 
 
        }
     
    }
 }
 
 
if (k > 0)
  {
  cout << "NO";
  }
else
  {
    if ( k == 0)
 
    {
      cout << "YES";
    }
  }
  return 0;
}
Заполнение происходит нормально, а проверка на квадраты как-то криво, не могу понять в чем причина, не находит эти самые квадраты, а порой находит не существующие.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
24.01.2014, 21:01     Задача о симпатичных таблицах #2
Цитата Сообщение от Nnakhze Посмотреть сообщение
аполнение происходит нормально, а проверка на квадраты как-то криво, не могу понять в чем причина, не находит эти самые квадраты, а порой находит не существующие.
Хм. а компилятор на 11 строчку не ругается?
Nnakhze
0 / 0 / 0
Регистрация: 24.01.2014
Сообщений: 3
24.01.2014, 21:07  [ТС]     Задача о симпатичных таблицах #3
Цитата Сообщение от mustimur Посмотреть сообщение
Хм. а компилятор на 11 строчку не ругается?
Нет, нет никаких ошибок/предупреждений, qt среда, mingw компилятор.

Добавлено через 5 минут
Странно, поставил инициализацию массива после ввода n, присвоил i = 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
#include <iostream>
#include <ctime>
#include <cstdlib>
 
using namespace std;
 
int main()
{
  srand(time(NULL));
  int i = 0, j = 0, n, k = 0;
 
  cin >> n;
  int array[n][n];
  for (;i<=n-1;i++) {
    for (j = 0;j<=n-1;j++)
     {
        array[i][j] = rand() % 2;
        cout << array[i][j] << " ";
      }
    cout << endl;
    }
 
i = 0;
for(;i<=n-2;i++)
  {
  for (j = 0;j<=n-2;j++)
    {
      if ((array[i][j]==0) && (array[i][j+1]==0) && (array[i+1][j]==0) && (array[i+1][j+1]==0))
    {
 
                     k = k + 1;    
               }
    }
 }
i = 0;
for(;i<=n-2;i++)
  {
  for (j = 0;j<=n-2;j++)
    {
      if ((array[i][j]==1) && (array[i][j+1]==1) && (array[i+1][j]==1) && (array[i+1][j+1]==1))
        {
                     k = k + 1;                
        }
      else continue;
    }
 }
 
 
if (k > 0)
  {
  cout << "NO";
  }
else
  {
    if ( k == 0)
 
    {
      cout << "YES";
    }
  }
  return 0;
}
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
24.01.2014, 21:48     Задача о симпатичных таблицах #4
Все равно странно....
Цитата Сообщение от Nnakhze Посмотреть сообщение
C++
1
2
i = 0;
for(;i<=n-2;i++)
я бы записал так:
C++
1
for(i=0;i<=n-2;i++)
то что ты местами перепутал это конечно ошибка, но так память выделять разве можно int array[n][n], если n не константа?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4925 / 2668 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
25.01.2014, 02:29     Задача о симпатичных таблицах #5
Цитата Сообщение от mustimur Посмотреть сообщение
но так память выделять разве можно int array[n][n], если n не константа?
это VLA. Пока что фишка gcc и mingw. В стандарт С++ не входит (обещают в С++14). Но вот в С99 данные действия даже обязаны поддерживаться.

Добавлено через 1 минуту
Цитата Сообщение от Nnakhze Посмотреть сообщение
if (k > 0)
* {
* cout << "NO";
* }
else
* {
* * if ( k == 0)
{
* * * cout << "YES";
* * }
* }
учитывая, что k не может быть отрицательным
C++
1
cout << (k ? "NO" : "YES");
Yandex
Объявления
25.01.2014, 02:29     Задача о симпатичных таблицах
Ответ Создать тему
Опции темы

Текущее время: 21:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru