Orar semigroup #2

Orar semigroup #2

10/14

1.  La un concurs se prezinta n concurenti din m tari. Sa se stabileasca ordinea intrarii in concurs a celor n concurenti astfel incat doi concurenti din aceeasi tara sa nu urmeze unul dupa altul.
#include<iostream>
using namespace std;
int n,x[10],nr=0;

struct concurent{
    int nr;
    char tara[100];
}a[100];

int afisare(int n)
{for(int i=1;i<=n;i++)
    cout<<a[x[i]].nr<<". "<<a[x[i]].tara<<endl;
nr++;
cout<<endl;}

int verif(int i)
{if(strcmp(a[x[i]].tara,a[x[i-1]].tara)==0)
    return 0;
for(int j=1;j<i;j++)
    if(a[x[i]].nr==a[x[j]].nr)
        return 0;
return 1;
}

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

int main()
{int i,j;
cin>>n;
for(i=1;i<=n;i++)
{a[i].nr=i;
cin>>a[i].tara;
}
back(1);
cout<<nr<<" solutii";
}
2.  Fiind data o multime de n cuburi, fiecare cub fiind caracterizat de lungimea laturii si culoarea sa, sa se scrie un program care sa genereze toate turnurile care se pot forma cu p cuburi astfel incat doua cuburi vecine sa nu aiba aceeasi culoare iar deasupra unui cub sa nu se poata aseza un cub cu latura mai mare.
 #include<iostream>
using namespace std;
int n,p,x[10],nr=0;

struct cub{
    int l;
    char culoare[100];
}a[100];

int afisare(int n)
{for(int i=1;i<=n;i++)
    cout<<a[x[i]].l<<" "<<a[x[i]].culoare<<endl;
nr++;
cout<<endl;}

int verif(int i)
{if(i>1 && strcmp(a[x[i]].culoare,a[x[i-1]].culoare)==0)
    return 0;
for(int j=1;j<i;j++)
    if(x[i]==x[j])
        return 0;
if(i>1 && a[x[i]].l>a[x[i-1]].l)
    return 0;
return 1;
}

void back(int i)
{int j;
for(j=1;j<=n;j++)
{x[i]=j;
if(verif(i))
    if(i==p)
        afisare(p);
    else back(i+1);
}
}

int main()
{int i,j;
cout<<"n=";cin>>n;
cout<<"p=";cin>>p;
for(i=1;i<=n;i++)
{cin>>a[i].l>>a[i].culoare;
}
cout<<endl<<"---------"<<endl;
back(1);
cout<<nr<<" solutii";
}
3. Se doreste memorarea mai usoara a unui numar de telefon. Vom asocia fiecarei cifre din numar una din literele de pe aceeasi tasta, de pe telefonul mobil.
a)Sa se afiseze toate  cuvintele care se pot obtine.
b)Sa se afiseze toate cuvintele in care nu exista 2 litere alaturate identice si nu exista 3 consoane alaturate.
Obs: daca numarul de telefon contine cifrele 0 sau 1 afisam un mesaj sau punem 2 caractere, de exemplu * si  !.
#include<iostream>
using namespace std;
int n,p,x[10],nr=0,c=0,v[100];
char a[11][5]={"*","!","abc","def","ghi","jkl","mno","pqrs","tuv","xywz"};

int afisare(int n)
{int k=1;
    for(int i=0;i<n;i++)
        {cout<<a[v[i]][x[i]]<<" ";
        k=k*10;}
nr++;
cout<<endl;}

int verif(int i)
{
    if(x[i]>=strlen(a[v[i]]))
        return 0;
else return 1;
}

void back(int i)
{int j;
for(j=0;j<=3;j++)
{
    x[i]=j;
    if(verif(i))
        if(i==n)
            afisare(n);
        else back(i+1);
}
}

int main()
{int i,j,nn;
cin>>n;
for(i=0;i<n;i++)
    cin>>v[i];
back(0);
cout<<nr<<" solutii";
}

vineri, 14 octombrie 2011 by DlMuresan
Categories: | 1 comment

One Comment

  1. Acest comentariu a fost eliminat de administratorul blogului.

Leave a Reply