Título: rompecabezas imposible Publicado por: rached1 en 26 Enero 2018, 07:52 am hola
tengo que programar el rompecabezas imposible en C de tal modo de que me quede una matriz 3 x 3 con números del 1 al 8 ordenados de manera aleatoria y que el lugar que le corresponde al nueve este vació, para después poder mover el espacio en blanco para ir acomodando los números. 3 2 5 8 1 6 7 4 el problema que tengo es que ya genero la matriz 3 x 3 ordenada de manera aleatoria con un espacio en blanco que se puede mover, pero no logro hacer que ese espacio en blanco sea el nueve ya que aveces toma otro numero. 1 8 6 9 5 7 2 4 ¿como podría hacerle para que el nueve siempre sea el espacio en blanco? #include<stdio.h> #include <time.h> #include <windows.h> bool verifica(int matriz[3][3], int i, int j, int nume){ for(i = 0; i < 3; i++){ for(j = 0; j < 3; j++){ if(nume == matriz[j]){ return false; } } } return true; } void imprimir_matriz(); int matriz[3][3]; int x= 2 ,y =2; int main() { int i, j, num; char caracter,enter; srand(time(0)); for(i = 0; i < 3; i++){ for(j = 0; j < 3; j++){ num = 1 + rand() % 9; while(verifica(matriz, 3,3, num) == false){ num = 1 + rand() % 9; } matriz[j] = num; } } for(i = 0; i < 3; i++){ for(j = 0; j < 3; j++){ if(matriz[j] != 0) { } } printf("\n"); } matriz[y]
do { caracter = getchar(); enter = getchar(); switch(caracter) { case 'w': //arriba if(y <= 1) { //Movimiento de ficha matriz[y]
y++; } else { printf("Fuera de los limites\n"); } break; case 's': //abajo if(y >= 1) { //Movimiento de ficha matriz[y]
y--; } else { printf("Fuera de los limites\n"); } break; case 'a': //izquierda if(x <= 1) { //Movimiento de ficha matriz[y]
imprimir_matriz(); x++; } else { printf("Fuera de los limites\n"); } break; case 'd': //derecha if(x >= 1) { matriz[y]
imprimir_matriz(); x--; } else { printf("Fuera de los limites\n"); } break; case '0': //Salida break; default: printf("Caracter Incorrecto"); break; } printf("Caracter : %c\n",caracter); }while(caracter != '0'); return 0; } void imprimir_matriz() { int i = 0,j; while(i < 3) { j = 0; while(j < 3) { if(matriz[j] != 0) { printf("[%2i]",matriz[j]); } else { printf("[ ]"); } j++; } printf("\n"); i++; } } Título: Re: rompecabezas imposible Publicado por: MAFUS en 26 Enero 2018, 12:17 pm Mete el código entre estas dos etiquetas:
[code=c] copia aquí todo tu código [/code] Si no lo hace así ves que no se va a entender. Título: Re: rompecabezas imposible Publicado por: Serapis en 26 Enero 2018, 15:52 pm Los números aleatorios debes elegirlos entre el rango 1-8... así no te saldrá nunca el 9.
Para evitar que los números salgan repetidos una y otra vez, procede de esta manera: Primeor se meten en la 'bolsa' los números que se van a rifar: Código: Array de enteros = funcion RellenarArray(entero cantidad, entero Inicio) Y luego se barajan, así el reparto es aleatorio: Código: funcion Barajar(Array de enteros Ar, entero Cantidad) Con cada nueva partida, tu harás dos llamadas, antes que nada: Código: Ar = Rellenararray(8, 1) |