Código:
#include "stdafx.h" #include "time.h" #include "iostream" #include "stdlib.h" #include "math.h" using namespace std; int a[9][9], b[9][9]; bool Verif_cuadros(int grupo){ int posic, i; bool acepto; acepto= true; for (posic=1; posic<10; posic++) { for (i=1; i<posic; i++) { if (b[grupo][posic]==b[grupo][i]) { acepto=false; goto sali; } } } sali: return acepto; } void Mezclar(){ int restoX, restoY; int subir, t, x, y; float X, Y; int grupo, posic; bool repet=false, acepta; srand((unsigned)time(NULL)); //recorre la matriz a partir del 1 for (y=1; y<10; y++) { for (x=1; x<10; x++) { a[y][x]= (rand()%9) + 1; //busca repetidos antes de x for (t=1; t<x; t++) { if (a[y][x]==a[y][t]) repet=true; } //busca repetidos antes de y if (repet==false) { for (t=1; t<y; t++) { if (a[y][x]==a[t][x]) repet=true; } } //si se repite if (repet==true){ repet=false; if (subir> 20){ subir= 0; x= 0; } else { subir++; x--; } } // si no se repite else { //busca multiplos de 3 /* 1 : 1 2 : 2 3 : 0 4 : 1 5 : 2 6 : 0 7 : 1 8 : 2 9 : 0 Ceil de 1 sobre 3 : 1 Ceil de 2 sobre 3 : 1 Ceil de 3 sobre 3 : 1 Ceil de 4 sobre 3 : 2 Ceil de 5 sobre 3 : 2 Ceil de 6 sobre 3 : 2 Ceil de 7 sobre 3 : 3 Ceil de 8 sobre 3 : 3 Ceil de 9 sobre 3 : 3 */ restoY= y % 3; restoX= x % 3; if (restoX==0) restoX=3; if (restoY==0) restoY=3; Y= y; X= x; posic= 3*(restoY-1) + restoX; grupo= 3*(ceil(Y/3)-1) + ceil(X/3); b[grupo][posic]= a[y][x]; subir= 0; } } if ((y%3)==0) { for (grupo=y-2; grupo<=y; grupo++){ acepta= Verif_cuadros(grupo); if (acepta==false) { y= y-3; goto sali; } } } sali:; } } void Imprimir(){ int y, x; for (y=1; y<10; y++) { for (x=1; x<10; x++) { cout << a[y][x] << " "; } cout << endl; } cout<<endl; } int _tmain(int argc, _TCHAR* argv[]) { Mezclar(); Imprimir(); system("pause"); return 0; }