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
-
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
#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
-
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, #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;}
}
-
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