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";
}