Autor Tema: problema de condicionales sudoku C++ (cplusplus)  (Leído 3321 veces)

DotarSojat

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 26
    • Ver Perfil
problema de condicionales sudoku C++ (cplusplus)
« en: 23 de Mayo 2015, 16:22 »
Buenas, estoy intentado hacer un sudoku, por fase, la primera es donde, ingresan un número de 16 dígitos y verificar que no esten repetidos los mismo numero estre filas y columnas en los diferente cuadrante, dividí el numero en dígitos que representarían cada número ya que esta divido por cuadrantes C1,C2.C3,C4



luego verifique que el número este entre 1 y 4 ( 1,2,3 y 4) ya que tiene que esta entre ese rango, ahora cuando intento verificar que no haya errores en los cuadrante y filas con condicionales, ( por ahora solo puedo utilizar eso)

no da como me gustaría que diera, aquí les muestro el código
Código: [Seleccionar]
#include <iostream>
using namespace std;

int main () {


int a,b,c,d,e,f,a11,a12,a13,a14,b11,b12,b13,b14,c11,c12,c13,c14,d11,d12,d13,d14;
unsigned long long int x;
cout<<"introduzca la cadena"<<endl;
cin>>x;



    a=x/100000000;
b=x%100000000;
c=a/10000;
d=a%10000;
e=b/10000;
f=b%10000;
a11=c/1000;
c=c%1000;
a12=c/100;
c=c%100;
a13=c/10;
a14=c%10;
b11=d/1000;
d=d%1000;
b12=d/100;
d=d%100;
b13=d/10;
b14=d%10;
c11=e/1000;
e=e%1000;
c12=e/100;
e=e%100;
c13=e/10;
c14=e%10;
d11=f/1000;
f=f%1000;
d12=f/100;
f=f%100;
d13=f/10;
d14=f%10;

if (((a11!=1) and (a11!=2)  and (a11!=3)  and (a11!=4))  or
((a12!=1) and (a12!=2)  and (a12!=3)  and (a12!=4))  or
((a13!=1) and  (a13!=2) and (a13!=3)  and (a13!=4))  or 
((a14!=1) and  (a14!=2) and  (a14!=3) and (a14!=4))  or
((b11!=1) and  (b11!=2) and  (b11!=3) and (b11!=4))  or 
((b12!=1) and  (b12!=2) and  (b12!=3) and (b12!=4))  or 
((b13!=1) and (b13!=2)  and (b13!=3)  and (b13!=4))  or 
((b14!=1) and  (b14!=2) and  (b14!=3) and (b14!=4))  or 
((c11!=1) and  (c11!=2) and (c11!=3)  and (c11!=4))  or 
((c12!=1) and  (c12!=2) and  (c12!=3) and (c12!=4))  or 
((c13!=1) and  (c13!=2) and  (c13!=3) and (c13!=4))  or 
((c14!=1) and (c14!=2)  and (c14!=3)  and (c14!=4))  or
((d11!=1) and  (d11!=2) and  (d11!=3) and (d11!=4))  or
((d12!=1) and (d12!=2)  and (d12!=3)  and (d12!=4))  or 
((d13!=1) and  (d13!=2) and (d13!=3)  and (d13!=4))  or 
((d14!=1) and  (d14!=2) and  (d14!=3) and (d14!=4))){
cout<<" numero introducido incorrecto"<<endl;}

if ((a11 == a12) and
(a11 == b11)  and
(a11 == b12)  and
(a12 == b11)  and
(a12 == b12)  and
(b11 ==b12) ) {
                     cout<<"error en el cuadrante C1"<<endl;}
                     
                     
                     if ((a13==a14) and
(a13==b13)  and
(a13==b14)  and
(a14==b13)  and
(a14==b14)  and
(b13==b14)) {
cout<<" error en el cuadrante C2"<<endl;
}


if ((c11==c12) and
(c11==d11) and
(c11==d12) and
(c12==d11) and
(c12==d12) and
(d11==d12)) {
cout<<"error en el cuadrante C3"<<endl;
}


if ((c13==c14) and
(c13==d13) and
(c13==d14) and
(c14==d13) and
(c14==d14) and
(d13==d14)) {
cout<<"error en el cuadrante C4"<<endl;
}



return 0;

}
quisiera mas que todo, que me dijera error en tal cuadrante y el numero se repite tantas veces o en fila y se repite tantas veces pero no se como hacerlo así, gracias
« Última modificación: 25 de Mayo 2015, 20:38 por Ogramar »

DotarSojat

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 26
    • Ver Perfil
Re:problema de condicionales
« Respuesta #1 en: 23 de Mayo 2015, 21:54 »
Podrían ayudarme en el código siempre me entra en el sino asi la solucion este valida o no
Solución válida: 1234432134124321
Solución Invalida: 1234432132222133

No agarra ninguno de los condicionales que le pongo, por favor,
Código: [Seleccionar]
#include <iostream>
using namespace std;

int main () {


int a,b,c,d,e,f,a11,a12,a13,a14,b11,b12,b13,b14,c11,c12,c13,c14,d11,d12,d13,d14;
unsigned long long int x;
cout<<"introduzca la cadena"<<endl;
cin>>x;



    a=x/100000000;
b=x%100000000;
c=a/10000;
d=a%10000;
e=b/10000;
f=b%10000;
a11=c/1000;
c=c%1000;
a12=c/100;
c=c%100;
a13=c/10;
a14=c%10;
b11=d/1000;
d=d%1000;
b12=d/100;
d=d%100;
b13=d/10;
b14=d%10;
c11=e/1000;
e=e%1000;
c12=e/100;
e=e%100;
c13=e/10;
c14=e%10;
d11=f/1000;
f=f%1000;
d12=f/100;
f=f%100;
d13=f/10;
d14=f%10;

if (((a11!=1) and (a11!=2)  and (a11!=3)  and (a11!=4))  or
((a12!=1) and (a12!=2)  and (a12!=3)  and (a12!=4))  or
((a13!=1) and  (a13!=2) and (a13!=3)  and (a13!=4))  or 
((a14!=1) and  (a14!=2) and  (a14!=3) and (a14!=4))  or
((b11!=1) and  (b11!=2) and  (b11!=3) and (b11!=4))  or 
((b12!=1) and  (b12!=2) and  (b12!=3) and (b12!=4))  or 
((b13!=1) and (b13!=2)  and (b13!=3)  and (b13!=4))  or 
((b14!=1) and  (b14!=2) and  (b14!=3) and (b14!=4))  or 
((c11!=1) and  (c11!=2) and (c11!=3)  and (c11!=4))  or 
((c12!=1) and  (c12!=2) and  (c12!=3) and (c12!=4))  or 
((c13!=1) and  (c13!=2) and  (c13!=3) and (c13!=4))  or 
((c14!=1) and (c14!=2)  and (c14!=3)  and (c14!=4))  or
((d11!=1) and  (d11!=2) and  (d11!=3) and (d11!=4))  or
((d12!=1) and (d12!=2)  and (d12!=3)  and (d12!=4))  or 
((d13!=1) and  (d13!=2) and (d13!=3)  and (d13!=4))  or 
((d14!=1) and  (d14!=2) and  (d14!=3) and (d14!=4))){
cout<<" numero introducido incorrecto"<<endl;}


else {
cout<<"Solucion valida"<<endl; }


if ((a11 == a12) and
(a11 == b11) and
(a11 == b12) and
(a12 == b11) and
(a12 == b12) and
(b11 ==b12) ) {
                     cout<<"error en el cuadrante C1"<<endl;}
                     
                     
               if  ((a13==a14)  and
(a13==b13) and
(a13==b14) and
(a14==b13) and
(a14==b14) and
(b13==b14)) {
cout<<" error en el cuadrante C2"<<endl;
}


if ((c11==c12) and
(c11==d11) and
(c11==d12) and
(c12==d11) and
(c12==d12) and
(d11==d12)) {
cout<<"error en el cuadrante C3"<<endl;
}



if ((c13==c14) and
(c13==d13) and
(c13==d14) and
(c14==d13) and
(c14==d14) and
(d13==d14)) {
cout<<"error en el cuadrante C4"<<endl;
}

if ((a11==a12) and
    (a11==a13) and
    (a11==a14)) {
   cout<<"error en la fila 1"<<endl;}
   
   
   if ((b11==b12)    and
       ( b11==b13)   and
       (b11==b14)) {
   cout<<"error en la fila 2"<<endl;}
   
   if((c11==c12) and
      (c11==c13) and
      (c11==c14)) {
   cout<<"error en la fila 3"<<endl;}
   
   if((d11==d12) and
  (d11==d13) and
      (d11==d14)) {
   cout<<"error en la fila 4"<<endl;}

if (( a11==b11) and
     (a11==c11) and
     (a11==d11)) {
cout<<"error en la columna 1"<<endl;}

if ((a12==b12) and
    (a12==c12) and
    (a12==d12)) {
cout<<"error en la columna 2"<<endl;}

if((a13==b13) and
   (a13==c13) and
   (a13==d13))  {
cout<<"error en la columna 3"<<endl;}

if ((a14==b14) and
    (a14==c14) and
    (a14==d14)) {
cout<<"error en la columna 4"<<endl;}

}


Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Re:problema de condicionales sudoku C++ (cplusplus)
« Respuesta #2 en: 25 de Mayo 2015, 20:42 »
Hola, manejar las celdas como variables independientes parece poco adecuado (complicaría bastante la resolución y generaría muchísimo más código del necesario). La representación del sudoku debes hacerla basándote en matrices (arrays de dos dimensiones o arreglos de dos dimensiones).

Esto lo tienes explicado en el curso http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=28&Itemid=59

La resolución de un sudoku automatizadamente en programación es relativamente complejo. Depende de lo que quieras hacer, la comprobación de no coincidencia en filas y columnas de un sudoku facilitado sí es simple, pero rellenar un sudoku semivacío es bastante más complejo.

Salu2

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".