Kevin Kofler a écrit :Je dirais même qu'elle est correcte et optimale ...
La solution de bobti89 m'a l'air correcte et optimale, à condition de mettre 41 et pas 9*9/2==40 dans le random.
J'ai écrit :
[...] l'algorithme de bobti89 marchera du premier coup ... à un petit détail près.
Comme on a a = 2 * rand ( 40 ) ;, la toute dernière case, dans le coin x=y=8 (soit a == 80), ne sera jamais choisie.
Il faut donc a = 2 * rand ( 41 ) ; ...
Plus exactement, dans la parenthèse du rand, il faut arrondir à la valeur entière supérieure le résultat (Xmax * Ymax / 2) (ça existe, ceil, en C ?).
Et de manière toute aussi générale, je préciserai que la valeur 9 utilisée pour le calcul de x et y correspond en fait à Xmax (Ymax n'intervient que dans le calcul de a).
Ah, tiens, c'est random, la fonction ?
Je croyais que c'était rand ...
De toute façon, je n'y connais rien au C

cerede2000 a écrit :Faux, tu risques de tirer la case -1 qui est en dehors de ton tableau.
hum ou alors pour randomiser cette variante a = random (41) * 2-1
Sally a écrit : [...] a = random (40) * 2 + 1; [...]C'est comme ça et pas autrement qu'il faut faire.
ses noires (le sous-ensemble contenant la case en bas à gauche) est :int a = 2 * rand ( n*n / 2 ) ; y = a / n ; x = a % n + y % 2 ;Pour un damier n*n avec n pair, l'algorithme pour obtenir les caen bas à droite), c'est :int a = 2 * rand ( n*n / 2 ) + 1 ; y = a / n ; x = a % n - y % 2 ;Pour obtenir les cases blanches (le sous-ensemble contenant la case Les deux différences sont le +1 pour a, et le + ou - y%2.
Ce n'est pas plus compliqué que ça ...
@++