Quantcast
Channel: Tópicos
Viewing all articles
Browse latest Browse all 11336

Matriz aleatória sem repetição

$
0
0
olha que fiz o código ainda para perceberes como entra o fisher-yates no código, porque senão ainda tirava o array numbers e fazia directamente na matrix e ficavas a ver navios ... para a próxima levas com algo deste género #include <stdio.h> #include <stdlib.h> #include <time.h> #define intMatrixCell(m, o, l, c) ((int *) (((size_t) m) + (o) * (l) * sizeof(int) + (c) * sizeof(int))) #define xorswap(x, y) (* (x) ^= * (y), * (y) ^= * (x), * (x) ^= * (y)) int main(int argc, char ** argv) { int n = 0, total = 0; do { printf("Insira a ordem da matriz quadrada : "); fflush(stdout); if (scanf("%d", &n) && n <= 0) printf("Ordem da matriz escolhida invalida\n"); } while (n <= 0); total = n * n; int * matrix = malloc(sizeof(int) * total); if (! matrix) { fprintf(stderr, "Erro na alocacao de memoria para a matriz\n"); return -1; } for (int i = 0; i < total; ++i) matrix[i] = i; srand(time(NULL)); for (int i = 0; i < total; ++i) { int selected = (rand() % (total - i)) + i; if (selected != i) xorswap(& matrix[selected], & matrix[i]); } for (int c = 0; c < n; ++c) { for (int l = 0; l < n; ++l) printf("%3d ", * intMatrixCell(matrix, n, l, c)); printf("\n"); } free(matrix); return 0; }

Viewing all articles
Browse latest Browse all 11336

Trending Articles