Informatică, întrebare adresată de mateimariamihaela, 8 ani în urmă

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

Răspuns de iulius56
1

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;

}

Alte întrebări interesante