Pagini recente » Cod sursa (job #1691363) | Cod sursa (job #1877774) | Cod sursa (job #1358841) | Cod sursa (job #1746093) | Cod sursa (job #873539)
Cod sursa(job #873539)
#include <iostream>
#include <string.h>
using namespace std;
int n;
bool exista=false;
char sir[10005];
char v[10005];
int lungime=1;
void f(int poz)
{
if(exista)
return;
if(v[poz]!='1' && v[poz]!='2' && v[poz]!='3' && v[poz]!='A' && v[poz]!='B' && v[poz]!='C')
return;
cout<<"f("<<poz<<") sir["<<poz<<"]="<<sir[poz]<<'\n';
cout<<"exista este "<<exista<<endl;
int contor=0;
for(contor=0;contor<=lungime;contor++)
cout<<sir[contor]<<' ';
cout<<endl; //cazuri particulare de iesire
if(poz>=n || lungime>n)
return;
if(poz==n-1 && lungime==n && sir[poz]==v[poz])
{
exista=true;
return;
}
if(sir[poz]=='1' || sir[poz]=='2' || sir[poz]=='3' )
if(sir[poz]==v[poz])
f(poz+1);
else
return; //sa repar copierile si indicii
if(sir[poz]=='A')
{
sir[poz]='1';
f(poz);
sir[poz]='2';
f(poz);
sir[poz]='3';
f(poz);
}
else if(sir[poz]=='B')
{
strcpy(sir+poz+1,sir+poz); //2=1
lungime++;
sir[poz]='2';
sir[poz+1]='B';
f(poz);
lungime+=3;
strcpy(sir+poz+4,sir+poz+1); //
sir[poz]='1';
sir[poz+1]='A';
sir[poz+2]='3';
sir[poz+3]='A';
sir[poz+4]='C';
f(poz);
lungime-=4;
}
else if(sir[poz]=='C')
{
sir[poz]='2';
f(poz);
lungime+=2;
strcpy(sir+poz+2,sir+poz);
sir[poz]='3';
sir[poz+1]='B';
sir[poz+2]='C';
f(poz);
sir[poz]='1';
sir[poz+1]='2';
sir[poz+2]='A';
f(poz);
lungime-=2;
}
}
int main()
{
cin>>n;
int i;
for(i=0;i<n;i++)
{
cin>>v[i];
}
/////////////////////
int contor=0;
for(contor=0;contor<=lungime;contor++)
{
sir[contor]=' ';
}
lungime=1;
sir[0]='A';
cout<<"incep cu A"<<endl;
if(!exista)
f(0);
//////////////////////
for(contor=0;contor<=lungime;contor++)
{
sir[contor]=' ';
}
lungime=1;
sir[0]='B';
cout<<"incep cu B"<<endl;
if(!exista)
f(0);
//////////////////////////
for(contor=0;contor<=lungime;contor++)
{
sir[contor]=' ';
}
lungime=1;
sir[0]='C';
cout<<"incep cu C"<<endl;
if(!exista)
f(0);
for(contor=0;contor<=lungime;contor++)
{
sir[contor]=' ';
}
lungime=1;
cout<<exista<<endl;
system("PAUSE");
return 0;
}