Orar semigroup #2

Orar semigroup #2

10/5

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>
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";
}
2. Sa se genereze produsul cartezian {1,2,...,m}x{1,2,...,m} de n ori.
#include<iostream>
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";
}
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.
#include<iostream>
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;
}
4. Sa se genereze toate palindroamele de lungime n.
#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";
}

marți, 4 octombrie 2011 by DlMuresan
Categories: | Leave a comment

Leave a Reply