1. Se citesc n nr nat. Sa se afiseze toate posibilitatile de plasare in fata numerelor a semnelor + sau - astfel incat expresia care se obtine sa aiba valoarea s.
#include<iostream>2. Sa se genereze produsul cartezian {1,2,...,m}x{1,2,...,m} de n ori.
using namespace std;
int a[100],x[100],n,s,nr=0;
void afisare()
{int i;
for(i=1;i<=n;i++)
if(x[i]==1)
cout<<"+"<<x[i]*a[i];
else cout<<x[i]*a[i];
cout<<endl;
nr++;
}
int verif(int i)
{int ss=0,j;
if(i!=n)
return 1;
for(j=1;j<=n;j++)
ss=ss+(x[j]*a[j]);
if(ss!=s)
return 0;
return 1;
}
void back(int i)
{int j;
for(j=-1;j<=1;j+=2)
{x[i]=j;
if(verif(i))
if(i==n)
afisare();
else back(i+1);
}
}
int main()
{int i;
cout<<"n=";cin>>n;
cout<<"s=";cin>>s;
for(int i=1;i<=n;i++)
cin>>a[i];
back(1);
cout<<endl<<nr<<" solutii";
}
#include<iostream>3. O persoana a uitat nr de tel. Stie doar ca numarul are 6 cifre, incepe cu 4 si contine 3 cifre de 0, dintre care doua sunt alaturate. Afisati toate variantele.
using namespace std;
int a[100],x[100],n,m,nr=0;
void afisare()
{int i;
for(i=1;i<=n;i++)
cout<<x[i]<<" ";
cout<<endl;
nr++;
}
void back(int i)
{int j;
for(j=1;j<=m;j++)
{x[i]=j;
if(i==n)
afisare();
else back(i+1);
}
}
int main()
{int i;
cout<<"n=";cin>>n;
cout<<"m=";cin>>m;
back(1);
cout<<endl<<nr<<" solutii";
}
#include<iostream>4. Sa se genereze toate palindroamele de lungime n.
using namespace std;
int x[11],nr=0;
void afisare()
{int i;nr++;
for(i=1;i<7;i++)
cout<<x[i]<<" ";
cout<<endl;
}
int verif(int i)
{int j,s=0,ok=0;
if(i>=4 && x[i]==0 && x[i-1]==0 && x[i-2]==0)
return 0;
if(i==6)
{for(j=3;j<7;j++)
if(x[j]==0 && x[j-1]==0)
ok=1;
if(ok==0)
return 0;
for(j=2;j<7;j++)
if(x[j]==0)
s++;
if(s!=3)
return 0;
}
return 1;
}
void back(int i)
{int j;
for(j=0;j<10;j++)
{x[i]=j;
if(verif(i))
if(i==6)
afisare();
else back(i+1);}
}
int main()
{x[1]=4;
back(2);
cout<<nr;
}
#include<iostream>
using namespace std;
int x[11],n,nr=0;
void afisare()
{int i;nr++;
for(i=1;i<=n;i++)
cout<<x[i]<<" ";
cout<<endl;
}
int verif(int i)
{if(i==1 && x[i]==0)
return 0;
if(n%2==1)
if(i>n/2)
if(x[i]!=x[n-i+1])
return 0;
if(n%2==0)
if(i>n/2)
if(x[i]!=x[n-i+1])
return 0;
return 1;
}
void back(int i)
{int j;
for(j=0;j<10;j++)
{x[i]=j;
if(verif(i))
if(i==n)
afisare();
else back(i+1);}
}
int main()
{
cin>>n;
back(1);
cout<<endl<<nr<<" solutii";
}