duminică, 4 noiembrie 2012

Sa se genereze toate numerele de lungime p care sunt supermultiple de p (atat numerele cat si toate prefixele lor sa fie multiplu de p)


#include<iostream.h>
int v[100],n,i,j,k,s,t;
void afisare()
long int s;
{ s=0;
for(i=1;i<=n;i++)
cout<<v[i]*p;
cout<<endl;}
void back(int k)
{int i;
for(i=1;i<=t;i++)
{v[k]=i;
if(k==n)
afisare();
else
back(k+1);}}
int main()
{cin>>n>>p;
t=9/p;
back(1);}

Se cer toate solutiile de asezare in linie a m caini si n pisici astfel incat sa nu existe o pisica intre doi caini.


#include<iostream.h>
int v[100],i,j,k,n,m;
void afisare()
{ int i;
for(i=1;i<=n+m;i++)
if(v[i]==1)
cout<<"C";
else
cout<<"P";
cout<<endl;}

int cont(int k)
{ int s,t;
s=0;
t=0;
for(i=1;i<=k;i++)
if(v[i]==1)
s++;
else
t++;
if(k=n+m)
if(s>n&&t>m)
return 0;
if(k>2&&v[k-2]==1&&v[k-1]==2&&v[k]==1)
return 0;
return 1;}

void back(int k)
{int i;
for(i=1;i<=2;i++)
{v[k]=i;
if(cont(k)==1)
if(k==n+m)
  afisare();
else
  back(k+1);}}

int main()
{cout<<"n=";
cin>>n;
cout<<"m=";
cin>>m;
back(1);
return 0;}

Fie n persoane. Vecinii se cearta. Sa se aranjeze astfel incat vecinii initiali sa nu se intalneasca


#include<iostream.h>
int v[100],i,j,k,n,t;
char a[100][100];
void afisare()
{ int i;
t=t+1;
for(i=1;i<=n;i++)
{cout<<a[v[i]]<<' ';}
cout<<endl;}

int cont(int k)
{ for(i=1;i<=k-1;i++)
if(v[i]==v[k])
  return 0;
if(abs(v[k]-v[k-1])==1)
  return 0;
if(k==n && v[k]==v[1])
  return 0;
return 1;}

void back(int k)
{int i;
for(i=1;i<=n;i++)
{v[k]=i;
if(cont(k)==1)
if(k==n)
  afisare();
else
  back(k+1);}}

int main()
{cout<<"n=";
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
back(1);
return 0;}

Dată o mulțime A de numere pozitive și un număr M, să se determine toate submulțimile lui A cu suma elementelor M


#include<iostream.h>
int v[100],n,k,t,i,m,j,s,M,a[100];

void afisare(int k)
{s=0;
for(i=1;i<=k;i++)
s=s+a[v[i]];
if(s==m)
for(i=1;i<=k;i++)
cout<<a[v[i]]<<' ';
cout<<endl; }

int cont(int k)
{ for(i=1;i<=k-1;i++)
if(v[i]>=v[k])
return 0;
return 1; }

void back(int k)
{int i;
for(i=1;i<=n;i++)
{v[k]=i;
if(cont(k)==1)
{afisare(k);
if(k<n)
back(k+1);}}}

int main()
{cout<<"n=";
cin>>n;
cout<<"m=";
cin>>m;
for(i=1;i<=n;i++)
cin>>a[i];
back(1);
return 0;}

Produs Cartezian

#include<iostream.h>
int v[100],i,j,n,x,k,a[100];
void afisare()
{int i;
for(i=1;i<=n;i++)
cout<<v[i]<<' ';
cout<<endl;}

void back(int k)
{int i;
for(i=1;i<=n;i++)
 {v[k]=i;
if(k==n)
afisare();
else
back(k+1);}}

int main()
{cout<<"n=";
cin>>n;
back(1);}

Problema


Se citesc n numere. Sa se genereze toate secventele din exact m dintre ele (m<n) astfel incat secventele sa contina numere distincte si doua numere alaturate sa nu aiba aceeasi paritate. Daca nu exista solutii se va afisa un mesaj;

#include<iostream.h>
int v[100],i,t,k,m,n,a[100];
void afisare ()
{t++;
for(i=1; i<=m; i++)
cout<<a[v[i]]<<' ';
cout<<endl;
}
int cont (int k)
{for(i=1; i<=k-1; i++)
if(v[i]==v[k])
return 0;
if(a[v[k]]%2==0&&a[v[k-1]]%2==0&&k>1)
return 0;
if(a[v[k]]%2==1&&a[v[k-1]]%2==1&&k>1)
return 0;
return 1;}
void back(int k)
{int i;
for(i=1; i<=n; i++)
{v[k]=i;
if(cont(k))
if(k==m)
afisare ();
else
back(1+k);}}
int main ()
{cout<<"n=";
cin>>n;
cout<<"m=";
cin>>m;
for(i=1; i<=n; i++)
cin>>a[i];
back(1);
if(t==0)
cout<<"nu exista";
}

Să se determine anagramele distincte ale unui cuvânt dat.


#include<iostream.h>
int v[100],i,k,n;
char a[100];
void afisare ()
{for(i=1; i<=n; i++)
cout<<a[v[i]-1]<<' ';
cout<<endl;
}
int cont (int k)
{for(i=1; i<=k-1; i++)
if(v[i]==v[k])
return 0;
return 1;}
void back(int k)
{int i;
for(i=1; i<=n; i++)
{v[k]=i;
if(cont(k))
if(k==n)
afisare ();
else
back(1+k);}}
int main ()
{cin>>a;
n=strlen(a);
back(1);
}

Sa se genereze cuvintele de k litere care incep cu o vocala si se termina cu o consoana.

# include <iostream.h>
# include <stdio.h>
# include <string.h>
int v[100],k,i,n;
char a[100],b[100];
void afisare (int k)
{for(i=1; i<=k; i++)
{b[i-1]=a[v[i]-1];
b[k]=0;}
if(strchr("aeiouAEIOU",b[0])!=0&&strchr("gtbcfhjklmnpqrsvwxyzBCDFGHJKLMNPQRSTVWXYZ",b[k-1])!=0)
            if(strlen(b)>=2)
cout<<b;
cout<<endl;}
int cont (int k)
{for(i=1; i<=k-1; i++)
            if(v[i]==v[k])
                        return 0;

return 1;}
void back(int k)
{int i;
for(i=1; i<=n; i++)
{v[k]=i;
if(cont(k))
{afisare(k);
if(k<n)
            back(k+1);}}}
int main ()
{cin>>a;
n=strlen(a);
back(1);}

joi, 20 septembrie 2012

Un pic de publicitate!! Ca toti avem nevoie de asa ceva la inceput!! :P

Incercati si n-o sa regretati!! :P

Un coleg de-alaturi!! 

 

Nu tineti foarte mult cont de titlul blogului!!

Se pot discuta diferite subiecte de la foarte interesante pana la cele mai ciudate!!. Cum sunt un foarte pasionat al sportului poate facem niste dezbateri in privinta sportului din Romania!! ;) Acum tinand cont de titlu ... veti gasi diferite tipuri de probleme in ambele limbaje!!! ;)

Helooo! Sunt nou aici!!

Subiecte noi dupa ce mai invat si eu niste setari!! :))