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

Pentru Pbinfo.ro
#3149. Se citește un cuvânt format din cel puțin două și cel mult zece caractere litere mici distincte care conține cel puțin două vocale. Afișați în ordine lexicografică anagramele cuvântului citit care au proprietatea că încep și se termină cu o vocală.


#3154. Se citește de la tastatură un cuvânt s format din cel mult 11 litere mici distincte. Să se genereze în ordine alfabetică și să se afișeze toate anagramele cuvântului s în care vocalele sunt puncte fixe.


#3155. Se citește de la tastatură un cuvânt s format din cel mult 11 litere mici distincte. Să se genereze în ordine alfabetică și să se afișeze toate anagramele cuvântului s în care consoanele sunt puncte fixe.



Va rog mult daca are cineva aceste probleme cu backtracking cu solutie de 100p.

Răspunsuri la întrebare

Răspuns de halingaeduardgabriel
3

Răspuns:

#include <iostream>

#include <cstring>

using namespace std;

int st[20], n, i, j;

char s[20], aux, v[10]="aeiou";

void afisare(int k)

{

   int i;

   for(i=1;i<=k;i++)

       cout<<s[st[i]];

   cout<<endl;

}

int valid(int k)

{

   int ev,i;

   ev=1;

   for(i=1;i<=k-1;i++)

       if(st[k]==st[i])

           ev=0;

   if(k==1||k==n)

   {if(strchr(v,s[st[k]])==0)

      ev=0;}

   return ev;

}

void back(int k)

{

   int i;

   for(i=0;i<=n-1;i++)

   {

       st[k]=i;

       if(valid(k))

           if(k==n)

           afisare(k);

       else

           back(k+1);

   }

}

int main()

{

   cin>>s;

   n=strlen(s);

   for(i=0;i<=n-2;i++)

       for(j=i+1;j<=n-1;j++)

       if(s[i]>s[j])

       {

       aux=s[i];

   s[i]=s[j];

   s[j]=aux;

}

back(1);

return 0;}

Explicație:

Aici ai o rezolvare de 80 de puncte pe care am facut -o in clasa cu profesorul de info. El a zis ca nu se stie la ce functie de ordonare a cuvintelor  s-a gandit autorul problemei incat sa dispara limita de timp depasita.

P.S:Daca cumva gasesti niste variabile  in plus, sunt de la alta  problema, nu te incurca cu nimic.


scarlatmariusstefan2: https://pastebin.com/S0XkUmit
scarlatmariusstefan2: 100 de puncte
FadedSouL: http://prntscr.com/qls2th - solutie de 100, trebuie sa folosit '\n' in loc de endl
Alte întrebări interesante