Ir ao conteúdo

Posts recomendados

Postado

Nesse sentido, elabore um algoritmo utilizando como modelo o tabuleiro abaixo.

O usuário informará as coordenadas para as quais deseja efetuar a jogada (ex. linha 1, coluna 2)

Posteriormente, o usuário, informará o número a ser testado (ex. 3)

De acordo com a situação corrente do tabuleiro, o algoritmo deverá testar se o número informado é permitido ou não.

Desafio: não permitir a inserção de números que irão comprometer a solução final do Sudoku. 

 

image.png.364b89e393ccce0c1dce836ba1d3cfb8.png

 

 

  • Curtir 1
Postado

@MassakiMsk

#include <stdio.h>
#include <stdlib.h>

int resolverSudoku(int, int);
void imprimirSudoku (void);
int mesmacoluna (int, int, int), mesmalinha (int, int, int), mesmoquadro (int, int, int);

int sudoku [9][9]= {4,0,0,8,0,0,0,0,1,
                    0,2,0,0,5,6,4,0,0,
                    1,8,0,0,0,7,0,2,3,
                    2,9,0,0,4,8,0,6,0,
                    0,0,4,0,0,1,9,0,0,
                    0,7,0,0,0,2,0,8,4,
                    6,3,0,2,0,0,0,1,5,
                    0,0,2,7,3,0,0,4,0,
                    7,0,0,0,0,5,0,0,9};

int  main(){
    int x=0, y=0;

    imprimirSudoku();
    resolverSudoku(x,y);
    imprimirsudoku();

    return 0;
}

void imprimirSudoku(){
    for (int i=0; i<9; i++){
        for (int j=0; j<9; j++){
            printf("%d", sudoku[j]);
        }
        printf("\n");
    }
    printf("\n\n");
}

int resolverSudoku(int x, int y){
    int num=1;
    int tx=0;
    int ty=0;

    if(sudoku[x][y]!= 0){
        if (x == 8 && y == 8){
            return 1;
        }
    if (x<8){
        x++;
    } else{
        if ( y < 8{
            x=0;
            y++;
        }
    }
    
    if (sudoku[x][y] == 0){
        while (num < 10){
            if (!mesmalinha (x,y,num) && !mesmoquadro(x,y,num) && !mesmacoluna(x,y,num)){
                sudoku[x][y] = num;
                
                if (x==8 && y==8){
                    return 1;
                }
                
                if (x < 8){
                    tx= x + 1;
                }else{
                    if (y<8){
                        tx=0;
                        ty= y+1
                    }
                }
                
                if (resolverSudoku(tx,ty)){
                    return 1;
                }
                
                
            }
            num++;
        }
    
    sudoku[x][y] = 0
    return 0;
    }

}

int mesmacoluna(int x, int)

adicionado 27 minutos depois

@MassakiMsk , @TYSQUARE89

 

ESSE QUE EU QUERO QUE ME AJUDEM!

O QUE FAÇO DEPOIS DISSO?

 

#include<stdio.h>
#include<stdlib.h>

#define LINHAS 9
#define COLUNAS 9

int tabuleiro[LINHAS][COLUNAS]=
{
{4, 0, 0, 8, 0, 0, 0, 0, 1},
{0, 2, 3, 0, 5, 6, 4, 0, 0},
{1, 8, 0, 0, 0, 7, 0, 2, 3},
{2, 9, 0, 0, 4, 8, 0, 6, 0},
{0, 0, 4, 0, 0, 1, 9, 0, 0},
{0, 7, 0, 0, 0, 2, 0, 8, 4},
{6, 3, 0, 2, 0, 0, 0, 1, 5},
{0, 0, 2, 7, 3, 0, 0, 4, 0},
{7, 0, 0, 0, 0, 5, 0, 0, 9}

};


int jLinha, jColuna, jValor;

/*FUNÇÃO PRINCIPAL
-------------------------------*/

void main(){
    imprimirTabuleiro();
    jogada();
    tabuleiro[jLinha][jColuna] = jValor;
    imprimirTabuleiro();

}

/*IMPRIME A MATRIZ
-------------------------------*/
void imprimirTabuleiro(){
    int i, j;

    for(i = 0; i < LINHAS; i++ ){
        for(j = 0; j < COLUNAS; j++){
            printf("%d \t", tabuleiro[j]);
        }

        printf("\n");
    }


}
/*RECEBE A JOGADA
-------------------------------*/

void jogada (){
    printf("Informe a linha, coluna e valor: ");
    scanf("%d%d%d", &jLinha, &jColuna, &jValor);

}

  • Curtir 1
Postado

@José Lucas Oliveira    para postar use o botão  <>   que está lá na barra de ferramentas da janela de responder, pois sem ele seu código fica faltando alguns caracteres ,   seu código apresenta alguns erros de compilação, então corrigi e está compilando, mas anda não entendi o que o jogo faz como é a jogada e quem ganha,  então seu código com algumas correções ficaria assim :

#include <stdio.h>
#include <stdlib.h>
int resolverSudoku(int, int);
void imprimirSudoku();
int mesmacoluna(int x,int y,int k);
int mesmalinha(int a,int b,int c);
int mesmoquadro (int k,int w,int z);
int sudoku [9][9]= {{4,0,0,8,0,0,0,0,1},
                    {0,2,0,0,5,6,4,0,0},
                    {1,8,0,0,0,7,0,2,3},
                    {2,9,0,0,4,8,0,6,0},
                    {0,0,4,0,0,1,9,0,0},
                    {0,7,0,0,0,2,0,8,4},
                    {6,3,0,2,0,0,0,1,5},
                    {0,0,2,7,3,0,0,4,0},
                    {7,0,0,0,0,5,0,0,9}};
int i,j;
int  main(){
    int x=0, y=0;
    imprimirSudoku();
    resolverSudoku(x,y);
    /*imprimirsudoku();*/
    return 0;
}
void imprimirSudoku(){
    for (i=0; i<9; i++){
        for (j=0; j<9; j++){
            printf("%d", sudoku[i][j]);
        }
        printf("\n");
    }
    printf("\n\n");
}
int resolverSudoku(int x, int y){
    int num=1;
    int tx=0;
    int ty=0;
    if(sudoku[x][y]!= 0){
        if (x == 8 && y == 8){
            return 1;
        }
    if (x<8){
        x++;
    } else{
        if ( y < 8){
            x=0;
            y++;
        }
    }

    if (sudoku[x][y] == 0){
        while (num < 10){
            if (!mesmalinha(x,y,num) && !mesmoquadro(x,y,num) && !mesmacoluna(x,y,num)){
                sudoku[x][y] = num;

                if (x==8 && y==8){
                    return 1;
                }

                if (x < 8){
                    tx= x + 1;
                }else{
                    if (y<8){
                        tx=0;
                        ty= y+1;
                    }
                }

                if (resolverSudoku(tx,ty)){
                    return 1;
                }


            }
            num++;
        }

    sudoku[x][y] = 0;
    return 0;
    }
    }
    return 0;
}
int mesmacoluna(int x,int y,int w){
    return 0;
}
int mesmalinha(x,y,num){
    return 0;
}
int mesmoquadro(x,y,num){
    return 0;
}

 

  • Curtir 1
Postado

Consegue resolver esse outro?

adicionado 1 minuto depois
Sabe completar?



#include<stdio.h>
#include<stdlib.h>
#define LINHAS 9
#define COLUNAS 9
int tabuleiro[LINHAS][COLUNAS]=
{
{4, 0, 0, 8, 0, 0, 0, 0, 1},
{0, 2, 3, 0, 5, 6, 4, 0, 0},
{1, 8, 0, 0, 0, 7, 0, 2, 3},
{2, 9, 0, 0, 4, 8, 0, 6, 0},
{0, 0, 4, 0, 0, 1, 9, 0, 0},
{0, 7, 0, 0, 0, 2, 0, 8, 4},
{6, 3, 0, 2, 0, 0, 0, 1, 5},
{0, 0, 2, 7, 3, 0, 0, 4, 0},
{7, 0, 0, 0, 0, 5, 0, 0, 9}
};

int jLinha, jColuna, jValor;
/*FUNÇÃO PRINCIPAL
-------------------------------*/
void main(){
    imprimirTabuleiro();
    jogada();
    tabuleiro[jLinha][jColuna] = jValor;
    imprimirTabuleiro();
}
/*IMPRIME A MATRIZ
-------------------------------*/
void imprimirTabuleiro(){
    int i, j;
    for(i = 0; i < LINHAS; i++ ){
        for(j = 0; j < COLUNAS; j++){
            printf("%d \t", tabuleiro[j]);
        }
        printf("\n");
    }

}
/*RECEBE A JOGADA
-------------------------------*/
void jogada (){
    printf("Informe a linha, coluna e valor: ");
    scanf("%d%d%d", &jLinha, &jColuna, &jValor);
}

 

  • Curtir 1
Postado

@José Lucas Oliveira   Qual ?!

 

adicionado 15 minutos depois

@José Lucas Oliveira    esse código ? ,  para completar vai demorar ,  é preciso ir aos poucos fazendo uma função de cada vez ,  faça primeiro a função que imprime o tabuleiro  e pelo que pude entender nesse tabuleiro vai ter vários números de acordo com a jogada,  então imprimir o tabuleiro inicial .  aqui está imprimindo quatro colunas com números mas não sei se é isso mesmo que é para fazer :

#include<stdio.h>
#include<stdlib.h>
#define LINHAS 9
#define COLUNAS 9
void imprimirTabuleiro();
void jogada ();
int tabuleiro[LINHAS][COLUNAS]=
{
{4, 0, 0, 8, 0, 0, 0, 0, 1},
{0, 2, 3, 0, 5, 6, 4, 0, 0},
{1, 8, 0, 0, 0, 7, 0, 2, 3},
{2, 9, 0, 0, 4, 8, 0, 6, 0},
{0, 0, 4, 0, 0, 1, 9, 0, 0},
{0, 7, 0, 0, 0, 2, 0, 8, 4},
{6, 3, 0, 2, 0, 0, 0, 1, 5},
{0, 0, 2, 7, 3, 0, 0, 4, 0},
{7, 0, 0, 0, 0, 5, 0, 0, 9}
};

int jLinha, jColuna, jValor;
/*FUNÇÃO PRINCIPAL
-------------------------------*/
void main(){
    imprimirTabuleiro();
    jogada();
    tabuleiro[jLinha][jColuna] = jValor;
    imprimirTabuleiro();
}
/*IMPRIME A MATRIZ
-------------------------------*/
void imprimirTabuleiro(){
    int i, j;
    for(i = 0; i < LINHAS; i++ ){
        for(j = 0; j < COLUNAS; j++){
            printf("%d \t", tabuleiro[j]);
        }
        printf("\n");
    }

}
/*RECEBE A JOGADA
-------------------------------*/
void jogada (){
    printf("Informe a linha, coluna e valor: ");
    scanf("%d%d%d", &jLinha, &jColuna, &jValor);
}

 

Postado

@devair1010

Tem que fazer de acordo com o problema que esta ali em cima:

 

Elabore um algoritmo utilizando como modelo o tabuleiro abaixo.

O usuário informará as coordenadas para as quais deseja efetuar a jogada (ex. linha 1, coluna 2)

Posteriormente, o usuário, informará o número a ser testado (ex. 3)

De acordo com a situação corrente do tabuleiro, o algoritmo deverá testar se o número informado é permitido ou não.

Desafio: não permitir a inserção de números que irão comprometer a solução final do Sudoku. 

 

image.png.f055844747aa645f110713963ce54486.pngSe puder me ajudar, agradecerei!!

Postado

A parte um pouco mais complicada aí é checar se o número já está dentro do quadrado 3x3... Pra isso você precisa descobrir em qual quadrado as coordenadas estão.

 

Com as coordenadas indo de 0 até 8 nas 2 direções, e (0, 0) ficando no canto esquerdo superior:

 

sudoku0.png.454c8155310f34278a54ae48cf1f136d.png

 

Cada quadrado com coordenadas (linha, coluna) estará dentro do quadrado 3x3 nos intervalos:

 

linhas: (linha/3)*3 até (linha/3)*3+2

colunas: (coluna/3)*3 até (coluna/3)*3+2

 

Obs: As operações de divisão acima são divisões inteiras (ou seja, 5/3=1).

 

 

Ex: O quadrado (5, 7) estará no quadrado 3x3 com intervalos indo de:

 

(5/3)*3 = (1)*3 = 3

e

(7/3)*3 = (2)*3 = 6

 

logo,

 

linhas: 3 até 5

colunas: 6 até 8

 

 

Então basta percorrer a matriz 3x3 nesse intervalo e checar se o número digitado já está lá, pra checar se é uma posição válida.

 

(E também fazer a mesma coisa para a coluna inteira e para a linha inteira, e se for válida em todos os casos o programa deixa o usuário colocar o número.)

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Mostrar mais  

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

Mostrar mais  
×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!