Sunteți pe pagina 1din 2

Explicatie:

Citim numarul de caractere si apoi caracterele, unul cate unul, folosindu-ne de un


vector. Dupa ce citim fiecare caracter verificam daca acesta este litera sau cifra. Daca este
litera, o transformam in litera mare si o afisam. Altfel, ne folosim de un vector de frecventa
pentru a inregistra numarul de aparitii al fiecarei cifre. Dupa ce am parcurs sirul in intregime,
verificam daca au fost inregistrate aparitii ale cifrei 0. Daca da, numarul cerut va avea ca prima
cifra cea mai mica cifra mai mare decat 0 care a aparut in sir (trebuie sa verificam vectorul de
frecventa). Parcurgem vectorul de frecventa in ordinea crescatoare a cifrelor si le afisam pe cele
care au numarul de aparitii diferit de 0.

C++:
#include <iostream>
#include <cstdio>
#include <fstream>
char v[1001];
int f[10];
using namespace std;

int main()
{
freopen("magic.in","r",stdin);
freopen("magic.out","w",stdout);
int n,i,aux,ok=0;
char ch;
cin>>n;
cin.get(ch);
for(i=1;i<=n;i++){
cin.get(v[i]);
if(v[i]>='a' && v[i]<='z'){
v[i]=v[i]-32;
cout<<v[i];
}
else{
aux=v[i]-'0';
f[aux]++;
}
cin.get(ch);
}
cout<<'\n';
if(f[0]!=0){
for(i=1;i<=9 && ok==0;i++)
if(f[i]!=0){
ok=1;
cout<<i;
f[i]=0;
}
cout<<"0";
}
for(i=1;i<=9;i++)
if(f[i]!=0)
cout<<i;
return 0;
}

Pseudocod:
citeste n;
citeste ch;
ok->0;
pentru i->1,n executa
citeste v[i];
daca v[i]>=’a’ && v[i]<=’z’ atunci
v[i]->v[i]-32;
scrie v[i];
altfel
aux->v[i]-‘0’;
f[aux]->f[aux]+1;
sfarsit daca
citeste ch;
sfarsit pentru;
scrie ‘/n’;
daca f[0]>0
pentru i->1,9 si ok=0
daca f[i]>0
ok->1;
scrie i;
f[i]=0;
sfarsit daca
sfarsit pentru
scrie “0”;
sfarsit daca
pentru i->1,9
daca f[i]>0
scrie i;
sfarsit daca
sfarsit pentru

S-ar putea să vă placă și