Buna, ma poate ajuta si pe mine cineva la urmatoarele probleme de informatica?
1.Sa se scrie un program care sa determine toate numerele naturale formate din n cifre pare distincte. Programul va returna ca date de iesire un vector care memoreaza numerele naturale care satisfac conditiile cerute. Sa se scrie o functie care afiseaza vectorul rezultat sis a se prezinte sub forma de enumerare si captura de ecran, rezultatele obtinute. (Backtracking)
2.Se dau doua siruri de n numere reale a1,…,an si b1, b2, …, bn. Sa se scrie o functie care determina o submulţime de indici i1,i2,…,im, unde m<=n, care să maximizeze valoarea expresiei: E= ai1* bi1 + ai2 * bi2+…+ aim * bim. Sa se demonstreze că algoritmul (strategia aleasa) este optimal. (Greedy)
Multumesc!
Răspunsuri la întrebare
Eu doar cu primul te pot ajuta.
#include <iostream>
int v[2000],n,st[200],nr=0;
using namespace std;
int comp() //formeaza din cifrele formate in vectorul st nr corespunzator
{
int tmp=0;
for(int i=1; i<=n; i++) tmp=tmp*10+st[i];
return tmp;
}
bool verif2(int a) // conditia ca cifrele sa fie distincte
{
for(int i=1; i<a; i++) for(int j=i+1; j<=a; j++) if(st[i]==st[j]) return 0;
return 1;
}
bool verif1(int a) //conditia ca cifrele sa fie pare
{
for(int i=1; i<=a; i++) if(st[i]%2==1) return 0;
return 1;
}
void bck(int k)
{
for(int i=0; i<=9; i++)
{
st[k]=i;
if((verif1(k))&&(verif2(k))&&st[1]!=0) //st[1]!=0 evita solutii precum 02,04,06,08 (pt. n=2), 024,026,048 (pt. n=3) (adica cu 0 la inceput)
{
if(k==n) v[nr++]=comp();
else bck(k+1);
}
}
}
int main()
{
cin>>n;
bck(1);
for(int i=0; v[i]!=0; i++) cout<<v[i]<<"\n";
return 0;
}