Problema cassaforte

/*La combinazione di una cassaforte è 
  composta da 5 numeri; un utente ha dimenticato
  la sequenza esatta, si ricorda solamente che sono
  presenti tre numeri pari, uno solo dei quali è 2
  e due numeri dispari che nella combinazione
  sono vicini.Lo zero non c'è.Scrivere un algoritmo 
  che propone una password del genere suddetto.
  N={ x| x!=0 AND 1<x<9 AND PPPDD }*/
  

#include<iostream>
#include<ctime>


using namespace std;


bool cerca_2(int array[]);
bool cerca_pd(int array[]);
bool cerca_consec(int array[]);

const int dim=5;

/*ritorna true se nell'array c'è uno e uno solo 2 */
bool cerca_2(int array[])
{
	int conta_2=0;
	for(int i=0;i<dim;i++)
	{
		if(array[i]==2)
		conta_2++;
	}
	if(conta_2==1)
		return true;
	else
		return false;
}

/*ritorna true se nell'array ci sono esattamente 2 dispari e tre pari*/
bool cerca_pd(int array[])
{
	int conta_d=0;
	int conta_p=0;
	
	for(int i=0;i<dim;i++)
	{
		if(array[i]%2==0)
		conta_p++;
		else
		conta_d++;
		
	}
	if(conta_d==2 && conta_p==3)
		return true;
	else
		return false;
	
}

/*ritorna true se ci sono due dispari consecutivi*/
bool cerca_consec(int array[])
{
	
	
	for(int i=0;i<dim-1;i++)
	{
		if(array[i]%2!=0 && array[i+1]%2!=0)
		{
		
		return true;	
			
		}
    }
    return false;
	
	
}
int main()
{
	
	/*password composta da due dispari e tre pari*/
	int password[dim]={0};
	
	/*valorizziamo l'array con 5 elementi casuali*/
	
	int conta=0;
	
	srand(time(0));
	
	/*finche non sono verificate tutte tre le condizioni, valorizza*/
	while(cerca_2(password)==false || cerca_pd(password)==false || cerca_consec(password)==false)
{
	conta=0;
	while(conta<dim)
	{
		
	/*valorizza l'array password con numeri da 1 a 9*/
	password[conta]=rand()%9+1;
		
		
		conta++;
	}
}
	
	
	/*visualizza l'array*/
	for(int i=0;i<dim;i++)
		cout<<password[i]<<" ";
	
	cout<<endl;
	
	
	
}