Kevin Kofler a écrit :
La solution de bobti89 m'a l'air correcte et optimale, à condition de mettre 41 et pas 9*9/2==40 dans le random.
Je dirais même qu'elle
est correcte et optimale ...
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 :
hum ou alors pour randomiser cette variante
a = random (41) * 2-1
Faux, tu risques de tirer la case -1 qui est en dehors de ton tableau.
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 ...
@++