function Ok=solution(nb,plaques,total,fid)
% La fonction SOLUTION(NB,PLAQUES,TOTAL) recherche la solution du compte
% est bon. NB est le nombre de plaques, PLAQUES contient les valeurs des
% plaques au départ et en cours de route, TOTAL est le total à atteindre.
% OK est vrai si la solution a été trouvée.

% JBR, 9-3-98

% Initialisation
if nargin==3
	fid=1;
end
resolu=0;	% pas trouvé
ops='*+-/';

% On envisage tous les couples de deux plaques
nb1=0;
while ~(resolu|(nb1==5))
	nb1=nb1+1;
	if plaques(nb1)~=0
		nb2=nb1;
		while ~(resolu|(nb2==6))
			nb2=nb2+1;
			if plaques(nb2)~=0
				% valeur des deux plaques
				pl1=max([plaques(nb1) plaques(nb2)]);
				pl2=min([plaques(nb1) plaques(nb2)]);
				% on envisage les 4 opérations
				op=1;	% produit
				while ~(resolu|(op==5))
					sol=0;
					switch op
					case 1	% multiplication
						if (pl1~=1)&(pl2~=1)
							sol=pl1*pl2;
						end
					case 2	% addition
						sol=pl1+pl2;
					case 3 	% soustraction
						sol=pl1-pl2;
					case 4	% division
						if (pl2~=1)&(rem(pl1,pl2)==0)
							sol=pl1/pl2;
						end
					end
					if sol==total
						resolu=1;
					elseif (sol~=0)&(nb>1)
						% calculs suivants
						plAux=plaques;
						plAux(nb1)=sol;
						plAux(nb2)=0;
						resolu=solution(nb-1,plAux,total,fid);
					end
					if resolu
						% on affiche le calcul
						fprintf(fid,[num2str(pl1),' ',ops(op),' ',num2str(pl2),' = ',num2str(sol),'\n']);
					end
					op=op+1; % opération suivante
				end
			end
		end
	end
	Ok=resolu;
end

						
							
