Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Probleme PB Info

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 27

1.

3909
#include <iostream>

using namespace std;

int n,k,ev,as,st[100],a,b,s[100];
void init()
{
st[k]=0;
}
int succesor()
{
while(st[k]<n)
{
st[k]=st[k]+1;
return 1;
}
return 0;
}
int valid()

{for(int i=1;i<k;i++)
if(st[k]==st[i])
return 0;
return 1;
}
int solutie()
{
return k==n;
}
void afisare()
{
for(int i=1;i<=n;i++)
cout<<s[st[i]]<<" ";
cout<<"\n";
}
void bt()
{
k=1;
init();
while(k>0)
{
as=1;ev=0;
while(as && !ev)
{
as=succesor();
if(as)
ev=valid();
}
if(as)
if(solutie())
afisare();
else
{
k++;
init();
}
else
k--;
}
}
int main()
{
cin>>a;//citim primu nr
cin>>b;//citim al doilea nr
s[1]=a;/*primu termen ia valoarea lui a pt ca trb sa afisam termenii de la a la b
inclusiv*/
n=b-a+1;// n= nr de termeni
for(int i=2;i<=n;i++)
s[i]=s[i-1]+1;//in s punem practice numerele a, a+1,a+2,..,b;
bt();
return 0;
}

2.125
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("permutari2.in");//fisierul de intrare/citire a datelor
ofstream fout("permutari2.out");//fisierul unde afisam
int n,k,ev,as,st[100],v[100];
void init()
{
st[k]=0;
}
int succesor()
{
while(st[k]<n)
{
st[k]=st[k]+1;
return 1;
}
return 0;
}
int valid()

{for(int i=1;i<k;i++)
if(st[k]==st[i])
return 0;
return 1;
}
int solutie()
{
return k==n;
}
void afisare()
{
for(int i=1;i<=n;i++)
fout<<v[st[i]]<<" ";//folosim fout pt ca asta am pus la fisieru de iesire
fout<<"\n";
}
void bt()
{
k=1;
init();
while(k>0)
{
as=1;ev=0;
while(as && !ev)
{
as=succesor();
if(as)
ev=valid();
}
if(as)
if(solutie())
afisare();
else
{
k++;
init();
}
else
k--;
}
}
int main()
{
fin>>n;//citim nr de elemente
for(int i=1;i<=n;i++)
fin>>v[i];//citim elementele(folosim fin pentru ca asta am pus la fisiere acolo

for(int i=1;i<n;i++)
for(int j=i+1;j<=n;j++)
if(v[i]>v[j])//vedem dc sunt in ordine corecta elementele de la mic la mare dc
nu le aranjam
{
int aux=v[i];
v[i]=v[j];
v[j]=aux;
}

bt();
return 0;
}
3.1327
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("sirpie.in");
ofstream fout("sirpie.out");
int n,k,ev,as,st[100],v[100];
void init()
{
st[k]=0;
}
int cmmdc(int a,int b)//algoritm pt a vedea dc doua nr is prime
{
while(a!=b)
{
if(a>b)
a=a-b;
else
b=b-a;
}
if(a==1)
return 1;//dc cmmdc de a si b==1 inseamna ca sunt prime
else
return 0;
}
int succesor()
{
while(st[k]<n)
{
st[k]=st[k]+1;
return 1;
}
return 0;
}
int valid()
{
for(int i=1;i<k;i++)
if(st[k]==st[i])
return 0;
if(k>=2)
if(cmmdc(v[st[k-1]],v[st[k]])!=1)//verificam dc doua nr is prime intre ele si
daca nu sunt dam return 0
return 0;

return 1;
}
int solutie()
{
return k==n;
}
void afisare()
{
for(int i=1;i<=n;i++)
fout<<v[st[i]]<<" ";
fout<<"\n";
}
void bt()
{
k=1;
init();
while(k>0)
{
as=1;ev=0;
while(as && !ev)
{
as=succesor();
if(as)
ev=valid();
}
if(as)
if(solutie())
afisare();
else
{
k++;
init();
}
else
k--;
}
}
int main()
{
fin>>n;
for(int i=1;i<=n;i++)
fin>>v[i];//citim numerele
for(int i=1;i<n;i++)
for(int j=i+1;j<=n;j++)
if(v[i]>v[j])//le punem in ordine crescatoare
{
int aux=v[i];
v[i]=v[j];
v[j]=aux;}

bt();
return 0;
}
4.202
#include <iostream>
#include <fstream>
using namespace std;
int n,k,ev,as,st[100];
ifstream fin("permpf.in");
ofstream fout("permpf.out");
void init()
{
st[k]=0;
}
int succesor()
{
if(st[k]<n)
{
st[k]=st[k]+1; return 1;
}
else
return 0;
}
int valid()
{if(st[k]==k)// punctele fixe sunt cand pe st(x) avem tot x, asa ca dam return 0
cand se intampla asta
return 0;
for(int i=1;i<k;i++)
if(st[i]==st[k])
return 0;
return 1;
}
int solutie()
{
return k==n;
}
void tipar()
{
for(int i=1;i<=n;i++)
fout<<st[i]<<" ";
fout<<endl;
}
void bt()
{
k=1;
init();
while(k>0)
{
as=1;
ev=0;
while(as&& !ev)
{
as=succesor();
if(as)
ev=valid();}
if(as)
if(solutie())
tipar();
else{k++;init();}
else k--;
}
}

int main()
{
fin>>n;//citim nr
bt();
return 0;
}
5.3150
#include <iostream>
#include <fstream>
using namespace std;
int n,k,ev,as,st[100];
ifstream fin("permpf.in");
ofstream fout("permpf.out");
void init()
{
st[k]=0;
}
int succesor()
{
if(st[k]<n)
{
st[k]=st[k]+1; return 1;
}
else
return 0;
}
int valid()
{if(k%2==0 && st[k]!=k)/*elementele pare nu trb sa-si schimbe pozitia, adica
pe st[2] trb neaparat sa avem 2 asa ca verificam daca suntem pe element par si
daca se respecta conditia st[k]==k, dc nu se respecta si k e par dam return 0*/
return 0;
for(int i=1;i<k;i++)
if(st[i]==st[k])
return 0;
return 1;
}
int solutie()
{
return k==n;
}
void tipar()
{
for(int i=1;i<=n;i++)
cout<<st[i]<<" ";
cout<<endl;
}
void bt()
{
k=1;
init();
while(k>0)
{
as=1;
ev=0;
while(as&& !ev)
{
as=succesor();
if(as)
ev=valid();}
if(as)
if(solutie())
tipar();
else{k++;init();}
else k--;
}
}

int main()
{
cin>>n;//citim nr
bt();
return 0;
}
6.3906
#include <iostream>
#include <cstring>
using namespace std;
int n,k,ev,as,st[100],s[100];
long long nr,S;
void init()
{
st[k]=0;
}
int succesor()
{
if(st[k]<n)
{
st[k]=st[k]+1;
return 1;
}
return 0;
}
int valid()
{for(int i=1;i<k;i++)
if(st[i]==st[k])
return 0;
return 1;

void tipar()
{int p=1;//p ne ajuta sa calculam numarul nou format
for(int i=1;i<=n;i++)
{S=S+s[st[i]]*p;/*adunam la suma nr ul nou insa pe bucati, intai unitatile,
dupa zecile, etc in functie de cat e p*/
p=p*10;}
}
void bt()
{
k=1;
init();
while(k>0)
{
as=1;ev=0;
while(as && !ev)
{
as=succesor();
if(as)
ev=valid();
}
if(as)
if(k==n)
{tipar();
}
else
{
k++;
init();
}
else
k--;
}
}
int main()
{
cin>>nr;//citim numarul
while(nr!=0)
{
s[++n]=nr%10;// punem cifrele lui nr intr un vector
nr=nr/10;
}
bt();
cout<<S;// afisam s ul dupa ce se iese din bt
return 0;
}
7.124
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("permutari1.in");
ofstream fout("permutari1.out");
int n,k,ev,as,st[100];
void init()
{
st[k]=n+1;/* st[k] ia val n+1 pt ca vrem sa luam valorile astea in ordine
inversă, deci in loc sa incepem de la 0, incepem de la n+1 si o sa scadem mai
incolo*/
}
int succesor()
{
while(st[k]>1)//schimbam si asta pt ca o luam in ordine inversa deci in loc sa
fie st[k]<n avem st[k]>1
{
st[k]=st[k]-1;//scadem in loc sa crestem
return 1;
}
return 0;
}
int valid()

{for(int i=1;i<k;i++)
if(st[k]==st[i])
return 0;
return 1;
}
int solutie()
{
return k==n;
}
void afisare()
{
for(int i=1;i<=n;i++)
fout<<st[i]<<" ";
fout<<"\n";
}
void bt()
{
k=1;
init();
while(k>0)
{
as=1;ev=0;
while(as && !ev)
{
as=succesor();
if(as)
ev=valid();
}
if(as)
if(solutie())
afisare();
else
{
k++;
init();
}
else
k--;
}
}
int main()
{
fin>>n;//citim n
bt();
return 0;
}
8.194
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
int n,k,ev,as,st[100];
char s[101];
ifstream fin("anagrame1.in");
ofstream fout("anagrame1.out");
void init()
{
st[k]=0;
}
int succesor()
{
if(st[k]<n)
{
st[k]=st[k]+1; return 1;
}
else
return 0;
}
int valid()
{
for(int i=1;i<k;i++)
if(st[i]==st[k])
return 0;
return 1;
}
int solutie()
{
return k==n;
}
void tipar()
{
for(int i=1;i<=n;i++)
fout<<s[st[i]-1];/*punem st[i]-1 pt ca vectorul s o ia de la 0 la n-1, si st o ia
de la 1 la n, asa ca punem un minus 1*/
fout<<endl;
}
void bt()
{
k=1;
init();
while(k>0)
{
as=1;
ev=0;
while(as&& !ev)
{
as=succesor();
if(as)
ev=valid();}
if(as)
if(solutie())
tipar();
else{k++;init();}
else k--;
}
}

int main()
{
fin>>s;
n=strlen(s);// n= lungimea sirului s
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
{
if(s[i]>s[j])// punem literele in ordine lexicografica
{
char aux=s[i];
s[i]=s[j];
s[j]=aux;
}
}
bt();
return 0;
}
9.3916
#include <iostream>

using namespace std;


int n,k,ev,as,m,st[100],s[100],m1;
long long nr,x;
void init()
{
if(k==1)
st[k]=0;
else
st[k]=st[k-1];
}
int succesor()
{
if(st[k]<n-m+k)
{
st[k]=st[k]+1;
return 1;
}
return 0;
}
int valid()
{
return 1;
}
int solutie()
{
return k==m;
}
void tipar()
{nr=0;// in nr calculam nr ul nou format
if(s[st[m]]!=0)// deoarece pornim for ul de la i=m, trb ca s[st[m]] sa fie diferit
de 0
for(int i=m;i>=1;i--)
nr=nr*10+s[st[i]];//calculam nr ul format
if(nr>x)
x=nr;/*dc nr>x, x ia val nr pt ca noi trb sa aflam cel mai mare nr care se
poate eliminand m1 cifre din nr de la inceput*/
}
void bt()
{
k=1;
init();
while(k>0)
{
as=1;ev=0;
while(as && !ev)
{
as=succesor();
if(as)
ev=valid();
}
if(as)
if(solutie())
tipar();
else
{
k++;
init();
}
else
k--;
}
}
int main()
{
cin>>nr;
while(nr)
{
s[++n]=nr%10;//punem cifrele lui nr intr un vector
nr=nr/10;
}
cin>>m1;//citim m1 care e nr de cifre pe care trb sa le eliminam din nr
m=n-m1;/* m ia val n-m1 pt ca facem combinari de n luate cate m, m fiind nr
de cifre care raman dupa ce eliminam m1 cifre*/
bt();
cout<<x;
return 0;
}
10.3154(asta da 80 bcz limita de timp depasita)
#include <iostream>
#include <cstring>
using namespace std;
int n,k,ev,as,st[100];
char s[101],v[]="aeiou";
void init()
{
st[k]=0;
}
int succesor()
{
if(st[k]<n)
{
st[k]=st[k]+1; return 1;
}
else
return 0;
}
int valid()
{if(strchr(v,s[st[k]-1])!=NULL && st[k]!=k)/* daca s[st[k]-1] e vocala si st[k]!
=k adc nu e pe locul ei(ex: la inceput e era pe 2, pe 2 trb sa fie mereu) dam
return 0*/
return 0;
for(int i=1;i<k;i++)
{if(st[i]==st[k])
return 0;
}
return 1;
}
int solutie()
{
return k==n;
}
void tipar()
{
for(int i=1;i<=n;i++)
cout<<s[st[i]-1];// punem s[st[i]-1] deoarece vectorul s o ia de la 0 la n-1 si
st o ia de la 1 la n
cout<<"\n";
}
void bt()
{
k=1;
init();
while(k>0)
{
as=1;
ev=0;
while(as&& !ev)
{
as=succesor();
if(as)
ev=valid();}
if(as)
if(solutie())
tipar();
else{k++;init();}
else k--;
}
}
int main()
{
cin>>s;//citim cuvantu
n=strlen(s);//n==nr de litere a cuv s
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
{
if(s[i]>s[j]&& strchr(v,s[i])==NULL && strchr (v,s[j])==NULL)/* le punem
in ordine lexicografica dar doar daca si s[i] si s[j] sunt consoane deoarece
vocalele nu putem sa le schimbam locu*/
{
char aux=s[i];
s[i]=s[j];
s[j]=aux;
}
}
bt();
return 0;
}
11.3158
#include <iostream>
#include <cstring>
using namespace std;
int n,k,ev,as,st[100],s[100],nr;
void init()
{
st[k]=0;
}
int succesor()
{
if(st[k]<n)
{
st[k]=st[k]+1; return 1;
}
else
return 0;
}
int valid()
{if(k==1 && s[st[k]]==0)// verificam dc pe prima pozitie avem 0 si daca avem
dam return 0 pt ca nu se poate
return 0;
for(int i=1;i<k;i++)
{if(st[i]==st[k])
return 0;
}
return 1;
}
int solutie()
{
return k==n;
}
void tipar()
{
for(int i=1;i<=n;i++)
cout<<s[st[i]];
cout<<"\n";
}
void bt()
{
k=1;
init();
while(k>0)
{
as=1;
ev=0;
while(as&& !ev)
{
as=succesor();
if(as)
ev=valid();}
if(as)
if(solutie())
tipar();
else{k++;init();}
else k--;
}
}

int main()
{cin>>nr;
while(nr!=0)// aici punem cifrele lui nr intr un vector
{s[++n]=nr%10;/*daca ai ++n in s[] inseamna ca de ex; la inceput n e 0, acu ai
val in s[1] si n==1 pt ca n a crescut in s inainte sa pui val in el sau cv, dc ai s[n+
+] si n la inceput era 0, acu ai valoarea in s[0] si n==1*/
nr=nr/10;
}
for(int i=1;i<n;i++)
for(int j=i+1;j<=n;j++)
if(s[i]>s[j])// punem cifrele in ordine crescatoare
{
int aux=s[i];
s[i]=s[j];
s[j]=aux;
}

bt();
return 0;
}
12.3161
#include <iostream>
#include <cstring>
using namespace std;
int n,k,ev,as,st[100],v[100],imin,vmin;
void init()
{
st[k]=0;
}
int succesor()
{
if(st[k]<n)
{
st[k]=st[k]+1; return 1;
}
else
return 0;
}
int valid()
{if(k==imin && st[k]!=k)// daca suntem pe pozitia elementului minim si
elementul minim nu e acolo(st[k]!=k) dam return 0
return 0;
for(int i=1;i<k;i++)
{if(st[i]==st[k])
return 0;
}
return 1;
}
int solutie()
{
return k==n;
}
void tipar()
{
for(int i=1;i<=n;i++)
cout<<v[st[i]]<<" ";
cout<<"\n";
}
void bt()
{
k=1;
init();
while(k>0)
{
as=1;
ev=0;
while(as&& !ev)
{
as=succesor();
if(as)
ev=valid();}
if(as)
if(solutie())
tipar();
else{k++;init();}
else k--;
}
}

int main()
{cin>>n;
vmin=999999999;
for(int i=1;i<=n;i++)
{
cin>>v[i];//citim elementele multimii
if(v[i]<vmin)/*dc v[i] e mai mic decat elementul minim deja stiut actualizam
valoarea lui vmin si a lui imin care ne arata pe ce pozitie e elem minim*/
{
vmin=v[i];
imin=i;
}
}
for(int i=1;i<n;i++)
for(int j=i+1;j<=n;j++)
{
if(v[i]>v[j] && i!=imin && j!=imin)/* punem nr in ordine crescatoare dar
doar daca nu avem elementul minim pe v[i] sau pe v[j]*/
{
int aux=v[i];
v[i]=v[j];
v[j]=aux;
}
}
bt();
return 0;
}
13.3910
#include <iostream>

using namespace std;


int n,k,ev,as,m,st[100],s[100],a,b;
void init()
{
st[k]=0;
}
int succesor()
{
if(st[k]<n)
{
st[k]=st[k]+1;
return 1;
}
return 0;
}
int valid()
{for(int i=1;i<k;i++)
if(st[k]==st[i])
return 0;
return 1;
}
int solutie()
{
return k==m;
}
void tipar()
{
for(int i=1;i<=m;i++)
cout<<s[st[i]]<<" ";
cout<<endl;
}
void bt()
{
k=1;
init();
while(k>0)
{
as=1;ev=0;
while(as && !ev)
{
as=succesor();
if(as)
ev=valid();
}
if(as)
if(solutie())
tipar();
else
{
k++;
init();
}
else
k--;
}
}
int main()
{cin>>a>>b>>m;/*citim primu nr, al doilea nr si nr de elemente pe care trb sa le
afisam( aranjamente de n luate cate m*/
n=b-a+1;// n== cate nr is de la a la b
s[1]=a;//primu nr ia val a
for(int i=2;i<=n;i++)
s[i]=s[i-1]+1;// punem in s nr de la a la b(a,a+1,a+2,...,b)
bt();
return 0;
}
14.204
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("siruri.in");
ofstream fout("siruri.out");
int n,k,ev,as,m,st[100];
void init()// folosim combinari pt numerele trb sa fie in ordine strict crescatoare
{
if(k==1)
st[k]=0;
else
st[k]=st[k-1];
}
int succesor()
{
if(st[k]<n-m+k)
{
st[k]=st[k]+1;
return 1;
}
return 0;
}
int valid()
{
if(k>1 && (st[k]-st[k-1]>2))/* dc nu suntem pe prima pozitie si diferenta
dintre elementul de pe pozitia asta si pozitia anterioara e mai mare decat 2
inseamna ca incalca conditia impusa de problema asa ca dam return 0*/
return 0;

return 1;
}
int solutie()
{
return k==m;
}
void tipar()
{
for(int i=1;i<=m;i++)
fout<<st[i]<<" ";
fout<<endl;
}
void bt()
{
k=1;
init();
while(k>0)
{
as=1;ev=0;
while(as && !ev)
{
as=succesor();
if(as)
ev=valid();
}
if(as)
if(solutie())
tipar();
else
{
k++;
init();
}
else
k--;
}
}
int main()
{fin>>n;
fin>>m;
bt();
return 0;
}
15.1286
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("submultimi1.in");
ofstream fout("submultimi1.out");
int n,k,ev,as,m,st[100];
void init()//folosim combinari pt ca le vrem in ordine crescatoare
{
if(k==1)
st[k]=0;
else
st[k]=st[k-1];
}
int succesor()
{
if(st[k]<n)
{
st[k]=st[k]+1;
return 1;
}
return 0;
}
int valid()
{
if((k>1 && st[k]-st[k-1]>1) || k==1)/*verificam dc intre elementul dp pozitia
actuala si elementul anterior este o dif mai mare de 1 si daca da dam return 1 pt
ca respecta conditia din prbl, dc k==1 nu trb sa verificam conditia bcz nu exista
st[k-1] deci dam direct return 1*/
return 1;
return 0;
}
int solutie()
{
return 1;/* solutia da return 1 mereu pt ca putem avea solutii si de un element,
2, 3 etc */
}
void tipar()
{
for(int i=1;i<=k;i++)
fout<<st[i]<<" ";
fout<<endl;
}
void bt()
{
k=1;
init();
while(k>0)
{
as=1;ev=0;
while(as && !ev)
{
as=succesor();
if(as)
ev=valid();
}
if(as)
if(solutie())
{tipar();
k++;
init();}
else
{
k++;
init();
}
else
k--;
}
}
int main()
{
fin>>n;
bt();
return 0;
}

You might also like