Informatică, întrebare adresată de Utilizator anonim, 9 ani în urmă

Buna! Va rog mult sa ma ajutati cu oproblema in c++ ^^

Se numește anagramă a unui cuvânt dat, un alt cuvânt ce conține toate literele primului, eventual în altă ordine.

Cerinţa
Se dă un cuvânt din cel mult 8 litere distincte. Să se afișeze, în ordine alfabetică, toate anagramele acestui cuvânt.

Date de intrare
Fişierul de intrare anagrame1.in conţine pe pe prima linie un cuvânt S, format din cel mult 8 litere distincte ale alfabetului englez.

Date de ieşire
Fişierul de ieşire anagrame1.out va conţine toate anagramele cuvântului S, fiecare pe o linie, în ordine alfabetică.

Răspunsuri la întrebare

Răspuns de enajarim
7
#include <fstream>

#include <cstring>

using namespace std;

ifstream is("anagrame1.in");

ofstream os("anagrame1.out");

int n;

char v[100],st[50], p[50];

 

void scrie()

{

    int i;

    {

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

            os<<v[st[i]-1];

        os<<'\n';

    }

}

 

void back(int k)

{

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

    if(!p[i])

        {

            st[k]=i;

            p[i]=1;

            if(k==n) scrie();

            else back(k+1);

            p[i]=0;

        }

}

 

int main()

{

    int i;

    is.get(v,1000);

    n=strlen(v);

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

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

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

            {

                char aux=v[i]; v[i]=v[j]; v[j]=aux;

            }

    back(1);

    return 0;

}
Alte întrebări interesante