[QUOTE=sangi89;25366586]Buongiorno a tutti. devo creare un programma che unisca due k-quadrati latini, mi spiego meglio. un k-quadrato latini di ordine n è una matrice n*n in cui in ogni cella vi sono esattamente k elementi e tale che, in ogni rico ed ogni colonna ogni elemento compaia esattamente k volte. Nel mio programma devo far inserire due k-quadrati latini con k diverso, verificare che effettivamente siano dei k quadrati latini e poi unirli, ovvero creare una matrice n*n in cui in ogni cella trovo l'unione degli elementi prensenti nelle celle corrispondenti dei quadrati inseriti come input.
Avevo pensato di creare una matrice i cui elementi sono vettori o multinsiemi. è possibile fare una cosa del genere? avevo abbozzato questo sino ad ora:
codice:#include <stdio.h> #include <math.h> #include "boost/multi_array.hpp" #include <iostream> #include "boost/array.hpp" typedef boost::multi_array<double, 3> two_d_array_type; int main() { int k,n,i,j,t; printf("Inserisci l'indice'"); scanf("%d",&k); printf("Inserisci l'ordine''"); scanf("%d",&n); two_d_array_type A(boost::extents[n][n][k]); for (i=0; i<n; i++){ for (j=0; j<n; j++){ for(t=0; t<k; t++){ printf( "Inserisci l'elemento di posto' [%d][%d][%d]: ", i, j, t); scanf("%d",&A[i][j][t]); while ( (A[i][j][t]>1)|| (A[i][j][t]<0) ){ /*controlla che il valore sia compreso tra 0 ed n*/ printf("Valore errato. Inserisci nuovamente l'elemento di posto' [%d][%d][%d]: ", i, j, t); scanf("%d", &A[i][j][t]); /*acquisisci nuovamente il valore*/ } } } } for (i=0;i<n;i++){ for(j=0;j<n;j++){ printf("|"); for(t=0; t<k; t++) { printf("%d ", A[i][j][t]); } //printf("|"); } printf("| \n"); } return(0); }

Rispondi quotando