Saludos!!
Yo estoy re-aprendiendo C/C++ para mi trabajo de grado y justamente estoy haciendo ejercicios de lógica de este típo de índole para agilizar la mente y obviamente aprender el lenguaje a medida que practico.
Bien, con respecto a tu pregunta, se me ocurren dos cosas...
- Crear la matriz, completarla de forma ordenada y después desordenarla por medio de un algoritmo.
- Crear dos matrices. La primera será tu matríz 5*5 y la otra 25*2. En esta última; una columna representa el valor de la letra y el otro representa si ya tomaste esa letra o no.
- Creas una sola matriz con todos sus elementos en null ó 0. Cada vez que vayas a agregar algún nuevo elemento debes recorrer la matriz para ver si ya existe, caso contrario lo agregas. Así sucesivamente hasta completarla.
Creo que ya no se me ocurren más opciones. Entre la 2 y la 3, yo particularmente me quedaría con la 3. Por qué? prefiero ahorrar en memoria y aprovechar más el procesador, pero a nivel de código es un poquito más larga. Queda a tu libre albedrío.
Para la segunda opción, se me ocurre que pudieras implementar un ciclo do-while mientras no hayas usado todas las letras y en el mismo vas asignando valores de forma aleatoria dentro del rango.
Recuerda algo: los caracteres del teclado poseen un valor decimal en la tabla ASCII y si no mal recuerdo la forma de transformar un valor decimal en caracter es:
Yo estoy "echando código" con Visual Studio 2008, y buscaré resolver el problema. Si de verdad no puedes con mi planteamiento; pudiese publicar la solución en los días por venir, pero te invito a que ya con mi planteamiento busques tú mismo programar la solución. Te sentirás mucho mejor cuando lo termines a que si te doy el código ya listo.