Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: DotarSojat en 23 de Mayo 2015, 16:22

Título: problema de condicionales sudoku C++ (cplusplus)
Publicado por: DotarSojat 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

(http://i.imgur.com/MKvWkYi.png)

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
Título: Re:problema de condicionales
Publicado por: DotarSojat 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;}

}

Título: Re:problema de condicionales sudoku C++ (cplusplus)
Publicado por: Ogramar 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