1

Тема: Перевірити чи є матриця 3х3 частиною матриці MxN

Треба перевірити чи є маленька матриця (3х3) частиною великої матриці (MxN).
Це завдання звідси https://www.codewars.com/kata/5a46179ce626c5ef8d000024.
Ось моє рішення:

#include <iostream>

void check_is_contained(int **mat1, const int mat2[3][3],const int nrows, const int ncols, int &row, int &col)
{
  bool found {true};
  row = -1;
  col = -1;
  for (int i=0; i<=nrows-3; ++i){
    for (int j=0; j<=ncols-3; ++j){
      if (mat1[i][j] == mat2[0][0]){
        for (int r=0; r<3; ++r){
          for (int s=0; s<3; ++s){
            if (mat2[r][s] != mat1[r+i][s+j]){
              found = false;
              break;
            }
          }
        }
        if (found){
          row = i;
          col = j;
          break;
        } 
      }    
    }
  }
}

С-стиль — це стиль автора завдання, виправити може лише він.
Моє рішення не проходить частину тестів, я не розумію, де помилка.
Не бачу відповідних тестових матриць.
Може, хтось тут побачить, де я помилився.

2

Re: Перевірити чи є матриця 3х3 частиною матриці MxN

Нащо пхаєш "массив у функцію"? Якщо не роумієш що це за ідіотизм, нащо взагалі цим займатися?

3

Re: Перевірити чи є матриця 3х3 частиною матриці MxN

Ваші break виходять лише з внутрішніх циклів, тобто пошук продовжується з наступного рядка. А завдання - вказати перше місце, де є ця матриця.
Крім того, found треба "зводити" в true перед внутрішніми циклами, бо інакше перший раз, як виставите found у false, буде й останнім.
Загалом, я б вам радив винести порівняння в окрему функцію, так ви значно краще бачитимете, що відбувається.

ur_naz, вам ніхто не забороняє зареєструватися на тому сайті і висловити своє обурення автору завдання. Правда, чому саме ви вважаєте стандарт мови C++ ідіотизмом, ви не пояснили; можливо, ви й праві, але швидше за все ідіотизмом є ваш коментар.
Мабуть, вам краще буде не відповідати мені, а написати прямо до WG21, щоб вони знали, який ідіотизм в стандарті пишуть.

Подякували: leofun01, Teg Miles2

4

Re: Перевірити чи є матриця 3х3 частиною матриці MxN

koala написав:

Ваші break виходять лише з внутрішніх циклів, тобто пошук продовжується з наступного рядка. А завдання - вказати перше місце, де є ця матриця.
Крім того, found треба "зводити" в true перед внутрішніми циклами, бо інакше перший раз, як виставите found у false, буде й останнім.
Загалом, я б вам радив винести порівняння в окрему функцію, так ви значно краще бачитимете, що відбувається.

Так, проблема була в тому, що found треба було поставити перед внутрішніми циклами.
Щойно переставив його, рішення пройшло всі перевірки.