Yo decía algo más así:
Como puedes ver me he basado en tu idea.
Éste es el resultado:
La primera fila y la segunda usan un conjunto de símbolo.
La tercera y la cuarta usan otro.
Código (c) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
char cartas[] = {'#', '%', '@', '*', '!', '<', 'x', '+'};
int total = sizeof(cartas);
int main() {
int inicio = 0;
srand(time(NULL));
for (int mitad=0; mitad<2; ++mitad) {
for (int i=0; i<2; ++i) {
int longitud = total/2;
for (int j=0; j<4; ++j) {
int deja = longitud - 1 + inicio;;
int pilla;
do {
pilla = rand() % longitud + inicio;
} while(j < 3 && pilla == deja);
printf(" %c", cartas[pilla]);
char x = cartas[deja];
cartas[deja] = cartas[pilla];
cartas[pilla] = x;
--longitud;
}
puts("");
}
inicio = total/2;
}
}
Como puedes ver me he basado en tu idea.
Éste es el resultado:
Código [Seleccionar]
# * @ %
@ % * #
! < + x
x + ! <
La primera fila y la segunda usan un conjunto de símbolo.
La tercera y la cuarta usan otro.