Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Zadanie SPOJ - SUDOKUC

Ostatnio zmodyfikowano 2020-01-08 10:26
Autor Wiadomość
Biedrzyk
Temat założony przez niniejszego użytkownika
[C++] Zadanie SPOJ - SUDOKUC
» 2020-01-03 20:13:24
Witam,
napisałem program jak w temacie, jednak gdy używam danych wejściowych podanych w treści zadania odpowiedź zawsze brzmi tak - nie mogę namierzyć błędu.
Link do zadania i danych wejściowych:https://pl.spoj.com/problems​/SUDOKUC/

Treść zadania:

Napisz program, który będzie sprawdzać czy podana tabela 9x9 liczb całkowitych jest prawidłowym rozwiązaniem łamigłówki sudoku.

Wejście

W pierwszej linii - jedna liczba całkowita n określająca liczbę przypadków testowych. Następnie kolejne przypadki testowe, w każdym 9 linii po 9 liczb całkowitych z przedziału <-1000, 1000> oddzielonych spacjami. Przypadki testowe są rozdzielone pustą linią.

Wyjście

Dla każdego przypadku testowego w wejściu jedna linia zawierająca słowo "TAK" lub "NIE" w zależności od tego, czy dany zestaw danych stanowi poprawne rozwiązanie sudoku.

C/C++
#include <iostream>

using namespace std;

bool czyCyfryWWierszachPowtarzajaSie( int planszaSudoku[ 9 ][ 9 ] )
{
    for( int numerWiersza = 0; numerWiersza < 9; numerWiersza++ )
    {
        for( int numerKolumnyBazowej = 0; numerKolumnyBazowej < 9; numerKolumnyBazowej++ )
        {
            for( int numerKolumnyPorownywanej = numerKolumnyBazowej + 1; numerKolumnyPorownywanej < 9; numerKolumnyPorownywanej++ )
            {
                if( planszaSudoku[ numerWiersza ][ numerKolumnyBazowej ] == planszaSudoku[ numerWiersza ][ numerKolumnyPorownywanej ] )
                {
                    return true;
                }
            }
        }
    }
    return false;
}

bool czyCyfryWKolumnachPowtarzajaSie( int planszaSudoku[ 9 ][ 9 ] )
{
    for( int numerKolumny = 0; numerKolumny < 9; numerKolumny++ )
    {
        for( int numerWierszaBazowego = 0; numerWierszaBazowego < 9; numerWierszaBazowego++ )
        {
            for( int numerWierszaPorownywanego = numerWierszaBazowego + 1; numerWierszaPorownywanego < 9; numerWierszaPorownywanego++ )
            {
                if( planszaSudoku[ numerWierszaBazowego ][ numerKolumny ] == planszaSudoku[ numerWierszaPorownywanego ][ numerKolumny ] )
                {
                    return true;
                }
            }
        }
    }
    return false;
}

bool czyCyfryWWybranejMalejPlanszyPowtarzajaSie( int planszaSudoku[ 9 ][ 9 ], int numerWierszaStartowegoMalejPlanszy, int numerKolumnyStartowejMalejPlanszy )
{
    for( int numerWierszaBazowego = numerWierszaStartowegoMalejPlanszy; numerWierszaBazowego < numerWierszaStartowegoMalejPlanszy + 3; numerWierszaBazowego++ )
    {
        for( int numerKolumnyBazowej = numerKolumnyStartowejMalejPlanszy; numerKolumnyBazowej < numerKolumnyStartowejMalejPlanszy + 3; numerKolumnyBazowej++ )
        {
            for( int numerWierszaPorownywanego = numerWierszaBazowego + 1; numerWierszaPorownywanego < numerWierszaStartowegoMalejPlanszy + 3; numerWierszaPorownywanego++ )
            {
                for( int numerKolumnyPorownywanej = numerKolumnyBazowej + 1; numerKolumnyPorownywanej < numerKolumnyStartowejMalejPlanszy + 3; numerKolumnyPorownywanej++ )
                {
                    if( planszaSudoku[ numerWierszaBazowego ][ numerKolumnyBazowej ] == planszaSudoku[ numerWierszaPorownywanego ][ numerKolumnyPorownywanej ] )
                    {
                        return true;
                    }
                }
            }
        }
    }
    return false;
}

bool czyCyfryWMalychPlanszachPowtarzajaSie( int planszaSudoku[ 9 ][ 9 ] )
{
    for( int numerWiersza = 0; numerWiersza < 9; numerWiersza += 3 )
    {
        for( int numerKolumny = 0; numerKolumny < 9; numerKolumny += 3 )
        {
            if( czyCyfryWWybranejMalejPlanszyPowtarzajaSie( planszaSudoku, numerWiersza, numerKolumny ) )
            {
                cout << "NIE";
                return true;
               
            }
        }
    }
    cout << "TAK";
    return false;
}

int main()
{
    int testy;
    int tab[ 9 ][ 9 ];
    cin >> testy;
   
    for( int i = 0; i < testy; i++ )
    {
        for( int i = 0; i < 9; i++ )
        {
            for( int j = 0; j < 9; j++ )
            {
                cin >> tab[ i ][ j ];
                cout << tab[ i ][ j ] << " ";
               
            }
            cout << endl;
        }
        cout << endl;
        cout << czyCyfryWMalychPlanszachPowtarzajaSie( tab );
        cout << endl;
    }
    return 0;
}
P-175946
pekfos
» 2020-01-03 22:11:25
Narysuj sobie na kartce co robią te 4 pętle w czyCyfryWWybranejMalejPlanszyPowtarzajaSie, ze szczególnym uwzględnieniem tych +1 w warunkach dwóch najbardziej zagnieżdżonych pętli.
P-175947
Biedrzyk
Temat założony przez niniejszego użytkownika
» 2020-01-05 21:25:52
Dzięki za podpowiedź, właśnie się za to biorę.
P-175979
Biedrzyk
Temat założony przez niniejszego użytkownika
» 2020-01-08 10:26:27
Znalazłem błąd :)już hula i buczy :) dzięki za naprowadzenie :)
P-175988
« 1 »
  Strona 1 z 1