Sunteți pe pagina 1din 7

1. Un grup de n persoane sunt aşezate pe un rând de n scaune.

Între oricare doi vecini


izbucnesc conflicte de interese. Persoanele îşi schimbă locurile aşezându-se astfel încât între
oricare doi foşti vecini să existe una sau cel mult două persoane. Scrieți un program C++ care
să afişeze toate variantele de reaşezare posibile.Rezultatele se scriu în fișierul
persoane.txt.Acesta va contine pe ultimul rand numărul soluțiilor generate

#include <iostream>
#include <fstream>
using namespace std;
int n, x[100], a[100][100], pozitie[100], pus[100], nr;
ofstream f("persoane.txt");
void afisare()
{
for (int i = 1; i <= n; i++) f << x[i]<<" ";

f << endl;
}
int valid(int k)
{
for (int i = 1; i <= n; i++)
{
if (a[x[k - 1]][x[k]] == 1) return 0;
for (k = 1; k <= n - 3; k++)
for (int j = k + 3; j <= n; j++)
if (a[x[k]][x[k + j]] == 1 || a[x[k + j]][x[k]]==1) return 0; //0
daca se afla mai mult 2 persoane intre cei certati
return 1;
}
}

void back(int k)
{ for (int i = 1; i <= n; i++)
if (!pus[pozitie[i]])
{
x[k] = pozitie[i]; pus[pozitie[i]] = 1; //RETIN CA AM ASEZAT
PERSOANA
if (valid(k))
if (k == n)
{
afisare(); nr++;
}
else back(k + 1); …
[20:02, 23.04.2020] Huba Buba: Problema 1
[20:02, 23.04.2020] Huba Buba: #include <iostream>
#include <fstream>
using namespace std;
int i, n, nr, s, x[100];
ofstream f("calcul.txt");

void afisare()
{
s = 0;
for (int j = 1; j <= n; j++)
if (x[j] == 1) s = s + j;
else s = s - j;

for (int i = 1; i <= n; i++)


if (x[i] == 1) f << "+" << i; else f << "-" << i; f <<"="<< s;

f << endl;
}
int valid(int k)
{
return 1;
}

void back(int k)
{

for (int i=0; i<=1; i++)


{
x[k] = i;
if (valid(k))
if (k == n)
{
afisare(); nr++;
}
else back(k + 1); ;

}
}

int main()
{
cout << "INTRODUCETI NUMARUL DE ELEMENTE AL SIRULUI: "; cin >> n;
nr = 0;
for (i = 1; i <= n; i++) cout << i << " ";

back(1);
f << "NUMARUL SOLUTIILOR GENERATE: "<< nr;
f.close();
return 0;
}
2. Fie sirul primelor n numare naturale (n citit de la tastatura). Se inserează inainte de fiecare
valoare semnul + sau -. Pentru fiecare solutie astfel generată afisează valoarea expresiei. Ex
pt n =3: +1+2+3=6 +1+2-3=0 +1-2+3=2 etc. Scrieți un program C++ care să afişeze toate
soluțiile posibile. Rezultatele se scriu în fișierul calcul.txt, căte una pe linie.Acesta va contine
pe ultimul rand numărul soluțiilor generate.

#include <iostream>
#include <fstream>
using namespace std;
int i, n, nr, s, x[100];
ofstream f("calcul.txt");

void afisare()
{
s = 0;
for (int j = 1; j <= n; j++)
if (x[j] == 1) s = s + j;
else s = s - j;

for (int i = 1; i <= n; i++)


if (x[i] == 1) f << "+" << i; else f << "-" << i; f <<"="<< s;

f << endl;
}

int valid(int k)
{
return 1;
}

void back(int k)
{

for (int i=0; i<=1; i++)


{
x[k] = i;
if (valid(k))
if (k == n)
{
afisare(); nr++;
}
else back(k + 1); ;

}
}

int main()
{
cout << "INTRODUCETI NUMARUL DE ELEMENTE AL SIRULUI: "; cin >> n;
nr = 0;
for (i = 1; i <= n; i++) cout << i << " ";

back(1);
f << "NUMARUL SOLUTIILOR GENERATE: "<< nr;
f.close();
return 0;
}

3. Se citeste un numar natural de maxim 9 cifre. Scrieți un program C++ care să genereze
toate numerele având aceleași cifre ca el. Rezultatele se scriu în fișierul numere.txt, căte unul
pe linie.Acesta va contine pe ultimul rand numărul soluțiilor generate precum și cel mai mare
număr generat.
#include <iostream>
#include <fstream>
using namespace std;
int max=0, x[100], cifra[100], n, nr, i;
ofstream f("numere.txt");

void afisare()
{
int nr1 = 0;
for (int i = 1; i <= n; i++) nr1 = nr1 * 10 + x[i]; f << nr1; if (m<nr1) max = nr1;
f << endl;
}

int valid(int k)
{ for(int j=1; j<=k-1; j++)
if (x[k] == x[j]) return 0;
if (x[1] == 0) return 0;
return 1;
}

void back(int k)
{
for (int i = 1; i <= n; i++)

{
x[k] = cifra[i];
if(valid(k))
if (k == n)
{
afisare(); nr++;
}
else back(k + 1);
}

int main()
{
cout << "INTRODUCETI NUMARUL CIFRELOR (n<10): "; cin >> n;
cout << endl;
cout << "INTRODUCETI CIFRELE NUMARULUI: " << endl;
nr = 0;
for (i = 1; i <= n; i++) { cout << "cifra[" << i << "]=" << " "; cin >> cifra[i]; }
cout << "NUMARUL INTRODUS ESTE: ";
for ( i = 1; i <= n; i++) cout << cifra[i] << " ";

back(1);

f << "NUMARUL MAXIM GENERAT ESTE "<<m;


f << endl;
f << "NUMARUL SOLUTIILOR ESTE: " << nr;
f.close();
return 0;
}

S-ar putea să vă placă și