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

Количество четверок - C++

Восстановить пароль Регистрация
 
Berens
1 / 1 / 0
Регистрация: 26.10.2010
Сообщений: 27
02.11.2010, 14:06     Количество четверок #1
Помогите пожалуйста с задачей
Дан двумерный массив A размера mxm, каждый элемент которого равен 0, 1, 2 или 3.Подсчитать в нем количество четверок A[i,j], A[i+1,j], A[i,j+1], A[i+1,j+1], в каждой из которых все элементы различны
Решение задачи на чистом СИ...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2010, 14:06     Количество четверок
Посмотрите здесь:

Подсчитать количество положительных и отрицательных чисел и количество нулей в массиве C++
C++ количество букв в слове, количество предложений, самое длинное слово в предложении
C++ Определить количество выигрышей, количество проигрышей и количество ничьих данной команды
В массиве записаны результаты N игр футбольной команды. Определить количество выигрышей, количество проигрышей и количество ничьих данной команды. C++
C++ Найти через индекс количество отрицательных и количество положительных элементов массива
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
KpeHDeJIb
 Аватар для KpeHDeJIb
56 / 56 / 3
Регистрация: 31.10.2010
Сообщений: 103
02.11.2010, 15:27     Количество четверок #2
Что-то вроде того можно использовать:

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
#include <stdio.h>
 
unsigned check(const int *A, unsigned m, unsigned i, unsigned j)
{
    return (int)(A[i + j * m] != A[i + (j+1) * m] !=
        A[(i+1) + j * m] != A[(i+1) + (j+1) * m]);
}
 
unsigned find_count(const int *A, unsigned n, unsigned m)
{
    unsigned i, j, count = 0;
 
    for (i = 0; i < n - 1; ++i)
        for (j = 0; j < m - 1; ++j)
            count += check(A, m, i, j);
 
    return count;
}
 
int main()
{
    const unsigned n = 20, m = 20;
    int A[n][m] = {{0}};
 
    printf("Count %u\n", find_count((int*)A, n, m));
 
    return 0;
}
Добавлено через 53 минуты
На самом деле там условие неправильное, просто не проверял программу

Правильно будет сделать так:
C
1
2
3
4
5
6
7
unsigned check(const int *A, unsigned m, unsigned i, unsigned j)
{
    int a = A[i + j * m], b = A[i + (j+1) * m],
        c = A[(i+1) + j * m], d = A[(i+1) + (j+1) * m];
 
    return (unsigned)(a != b && a != c && a != d && b != c && b != d && c != d);
}
Berens
1 / 1 / 0
Регистрация: 26.10.2010
Сообщений: 27
02.11.2010, 16:18  [ТС]     Количество четверок #3
Что то она у меня не хочет ехать, а попроще ника изобразить без подпрограмм не получится чисто с вложенными циклами?

Добавлено через 44 минуты
Есть код на Паскале, но нужно перевести как то на СИ
Pascal
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
Program P1; 
Var
  A: Array[1..50,1..50] Of Byte;
  m,i,j,sum:Byte;
Begin
  Write('Задайте размерность матрицы: ');
  ReadLn(m);
  WriteLn('Укажите элементы массива');
  For i:=1 To m Do
   For j:=1 To m Do
   Begin
    Write('A[', i, ',', j,']:=');
    ReadLn(A[i,j]);
   End;
  WriteLn('Исходный массив:');
  For i:=1 To m Do
   Begin
     For j:=1 To m Do
       Write(A[i,j]:3);
     WriteLn;
   End;
  sum:=0; {Начальное количество четверок}
  For i:=1 To m-1 Do 
   For j:=1 To m-1 Do
        If A[i,j]+A[i,j+1]+A[i+1,j]+A[i+1,j+1]=6 Then sum:=sum+1;
  WriteLn('Количество четверок = ',sum);
End.
KpeHDeJIb
 Аватар для KpeHDeJIb
56 / 56 / 3
Регистрация: 31.10.2010
Сообщений: 103
02.11.2010, 16:36     Количество четверок #4
Кстати неправильный алгоритм, если в четверке будет например 0 2 2 2 то он посчитает что четверка не содержит повторяющихся элементов, правильно будет вот так:
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
#include <stdio.h>
 
#define N 5
#define M 5
 
int main()
{
    const int A[N][M] = {{1,2,3,4,5}, {1,2,3,4,5}, {1,2,3,4,5},
        {1,2,3,4,5}, {1,2,3,4,5}};
    unsigned count = 0, i, j;
    int a, b, c, d;
 
    for (i = 0; i < N - 1; ++i)
    {
        for (j = 0; j < M - 1; ++j)
        {
            a = A[i][j];
            b = A[i][j+1];
            c = A[i+1][j];
            d = A[i+1][j+1];
 
            count += (unsigned)(a != b && a != c && a != d
                && b != c && b != d && c != d);
        }
    }
 
    printf("Count %u\n", count);
 
    return 0;
}
Berens
1 / 1 / 0
Регистрация: 26.10.2010
Сообщений: 27
02.11.2010, 17:13  [ТС]     Количество четверок #5
Не, чего то не то, не хочет работать
KpeHDeJIb
 Аватар для KpeHDeJIb
56 / 56 / 3
Регистрация: 31.10.2010
Сообщений: 103
02.11.2010, 17:18     Количество четверок #6
Цитата Сообщение от Berens Посмотреть сообщение
Не, чего то не то, не хочет работать
А поподробнее описать проблему если? Что именно не работает, как проверяешь, какой результат ожидаешь получить, что получаешь вместо ожидаемого результата? Отвечай на мой ответ
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2010, 12:08     Количество четверок
Еще ссылки по теме:

C++ Подсчитать количество всех строк, а потом - количество слов в каждой строке
Определить количество слов в заданном тексте и количество символов в каждом слове C++
Пользователь вводит строку. Определить количество букв (рус eng), количество цифр и количество остальных C++

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

Или воспользуйтесь поиском по форуму:
Berens
1 / 1 / 0
Регистрация: 26.10.2010
Сообщений: 27
03.11.2010, 12:08  [ТС]     Количество четверок #7
Спасибо, за идею, я сам по другому немного уже прогу написал
Yandex
Объявления
03.11.2010, 12:08     Количество четверок
Ответ Создать тему
Опции темы

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