Se consideră un cuvânt C
format din litere mici, nu neapărat distincte.
Cerința
Să se afișeze în ordine lexicografică toate cuvintele distincte formate cu exact aceleași caractere ca și C
.
Date de intrare
Fișierul de intrare permrep.in
conține pe prima linie cuvântul C
.
Date de ieșire
Fișierul de ieșire permrep.out
va conține pe câte o linie un cuvânt care are exact aceleași litere ca și C
.
Restricții și precizări
- Cuvântul
C
va avea lungimea de cel mult9
Exemplu
permrep.in
mama
permrep.out
aamm amam amma maam mama mmaa
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema permrep:
#include <bits/stdc++.h>
#define nmax 15
using namespace std;
int st[nmax], n, N;
char cuv[nmax]; /// cuvantul citit
char lit[nmax]; /// lit[i] memoreaza o litera distincta din cuv[]
int nr[nmax]; /// nr[i]=de cate ori apare lit[i] in cuv[]
ifstream fin("permrep.in");
ofstream fout("permrep.out");
void CitireMemorare()
{
int i, j;
fin >> cuv;
N = strlen(cuv);
n = 0;
for (i = 0; cuv[i] != 0; i++)
{
/// cauta litera cuv[i] in lit[]
for (j = 1; j <= n && cuv[i] != lit[j]; j++)
;
if (j > n) /// cuv[i] nu apare in lit[]
{
n++;
lit[n] = cuv[i];
nr[n] = 1;
}
else nr[j]++;
}
/// sorteaza literele crescator in lit[]
for (i = 1; i < n; i++)
for (j = i + 1; j <= n; j++)
if (lit[i] > lit[j])
{
char ch = lit[i];
lit[i] = lit[j];
lit[j] = ch;
int x = nr[i];
nr[i] = nr[j];
nr[j] = x;
}
}
void Afisare()
{
for (int i = 1; i <= N; i++)
fout << lit[st[i]];
fout << "\n";
}
void Back(int top)
{
if (top == N + 1) Afisare();
else for (int i = 1; i <= n; i++)
if (nr[i] > 0)
{
nr[i]--;
st[top] = i;
Back(top + 1);
nr[i]++;
}
}
int main()
{
CitireMemorare();
Back(1);
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #2205 permrep
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2205 permrep de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!