Sunteți pe pagina 1din 25

apartenenta C++ #1539

Scriei n limbajul C/C++ definiia complet a subprogramului apartenenta, care primete ca argument
un numr natural nenul n i returneaz valoarea 1 dac n aparine
mulimii H={2x3y5z|x,y,zN}H={2x3y5z|x,y,zN}, respectiv 0 n caz contrar.
int apartenenta (int n) {

while (n%2==0) { // verificam daca e multiplu de 2 si il impartim pana nu


mai e
n=n/2;
}
while (n%3==0) { // verificam daca e multiplu de 3 si il impartim pana nu
mai e
n=n/3;
}
while (n%5==0) { //verifica, daca e multiplu de 5 si il impartim pana nu
mai e
n=n/5;
}
if (n==1) return 1; // daca n ramane 1 inseamna ca el este un produs dintre
2,3 si 6 si apartine lui H
else return 0; // daca nu, nu e asta e
}

#896 FactorialIF

Cerina
S se scrie o funcie C++ care s returneze pentru un numr natural n transmis ca
parametru valoarea lui n!, adic 12...n.

Restricii i precizri
numele funciei va fi fact
funcia va avea un singur parametru, n
valoarea lui n! va fi returnat de ctre funcie
prin definiie, 0!=1
0 n 12

Exemplu
fact(4) = 24
int fact(int n)
{ if(n==0) return 1;
int p=1,i;
for(i=1;i<=n;i++)
p=p*i;
return p;
}

#1826 ZeroF

Cerina
S se scrie o funcie C++ care s returneze pentru un numr natural ntransmis ca
parametru numrul de cifre zero de la finalul lui n! = 12...n.

Restricii i precizri
numele funciei va fi zerof
funcia va avea un singur parametru, n
valoarea calculat va fi returnat de ctre funcie
prin definiie, 0!=1
0 n 10000

Exemplu
fact(6) = 1
6!=720 se termin cu o cifr zero
int zerof(int n)
{
int z=0;
long long k=5;
while(k<=n)
{
z=z+n/k;
k=k*5;
}
return z;
}
#897 SumCifF
Cerina
S se scrie o funcie C++ care s returneze suma cifrelor unui numr natural
transmis ca parametru.

Restricii i precizri
numele funciei va fi sumcif
funcia va avea un parametru reprezentnd numrul dat, care va fi mai mic
dect 2.000.000.000

Exemplu
sumcif(241) = 7
int sumcif (int n) {
int s=0;
while (n) { //luam ultima cifra a lui n cat timp exista si o adaugam la
suma, apoi il impartim pe n la 10
s=s+n%10;
n/=10;
}
return s; //apoi returnam suma
}//si aici e gata algoritmul

#1509 NrMaxim
Cerina
S se scrie o funcie care are ca parametru un numr natural n i returneaz cel mai
mare numr care poate fi obinut mutnd, pe rnd, prima cifr a numrului n i a
celor obinute pe parcurs, pe ultima poziie. Nu se vor folosi iruri de caractere i
tablouri auxiliare.

Restricii i precizri
numele funciei va fi nrmaxim
funcia va avea un parametru reprezentnd numrul dat, care va fi mai mic
dect 1.000.000.000

Exemplu
nrmaxim(n=4273) = 7342 este cel mai mare numr
dintre 2734, 7342, 3427, 4273.
int nrmaxim(int n)
{ int c,i,max=-1,cont=0,x=0,contnou;
c=n;
while(c)
{cont++;
c/=10;}
max=n;
contnou=1;
for(i=1;i<=cont;i++)
contnou=contnou*10;
for(i=10;i<=contnou;i=i*10)
{c=n;
x=c/i+ (c%i)*(contnou/i);
if(x>max) max=x;}
return max;
}

#898 SumFactCif
Cerina
S se scrie o funcie C++ care s returneze suma factorialelor cifrelor unui numr
natural transmis ca parametru.

Restricii i precizri
numele funciei va fi sumfactcif
funcia va avea un parametru reprezentnd numrul dat, care va fi mai mic
dect 2.000.000.000
prin definiie, 0! = 1
Exemplu
sumfactcif(241) = 27, adic 2!+4!+1! = 1*2+1*2*3*4+1 =
2+24+1 = 27
int sumfactcif(int v)
{int s = 0, fact[11];
fact[0] = 1;
for(int i=1; i<=9; i++)
fact[i] = fact[i-1] * i;
do{s += fact[v%10];
v/=10;
}while(v);
return s;}

#24 Oglindit2
Cerina
S se scrie o funcie C++ care s returneze oglinditul unui numr natural transmis
ca parametru.

Restricii i precizri
numele funciei va fi oglindit
funcia va avea un parametru reprezentnd numrul pentru care se
calculeaz oglinditul
numrul pentru care se calculeaz oglinditul va fi mai mic
dect 1.000.000.000

int oglindit(int n)
{ int x=0;
while(n)
{ x=x*10+n%10;
n/=10; }
return x;
}

#25 CelMaiMareNr
Cerina
S se scrie o funcie C++ care s returneze cel mai mare numr care se poate scrie
cu cifrele unui numr natural transmis ca parametru.

Restricii i precizri
numele funciei va fi cmmnr
funcia va avea un parametru reprezentnd numrul care se d
numrul care se d va fi mai mic dect 1.000.000.000

int cmmnr( int n)


{ int cn,v[10],i,nr=0;
for(i=0; i<=9; i++)v[i]=0;
for(i=0; i<10; i++)
{cn=n;
while(cn)
{ if(cn%10==i) v[i]++;
cn/=10;} }
for(i=9; i>=0; i--)
{while(v[i])
{ nr=nr*10+i;
v[i]--; }}
return nr;}

#26 CelMaiMicNr
Cerina
S se scrie o funcie C++ care s returneze cel mai mic numr care se poate scrie
cu cifrele unui numr natural transmis ca parametru.

Restricii i precizri
numele funciei va fi cmmnr
funcia va avea un parametru reprezentnd numrul care se d
numrul care se d va fi mai mic dect 1.000.000.000

int cmmnr(int n){


int i;
int v[10];
for(i=0;i<10; i++){ //initializam vectorul cu 0
v[i]=0;
}
while (n){ //punem cifrele lui n in vectori de frecventa pe masura ce
il distrugem
v[n%10]++;
n=n/10;
}
while(n==0){ //punem cea mai mica cifra(in afara de 0) la inceput
for(i=1; i<10 && n==0;i++){
if(v[i]>0){
n=i;
v[i]--;

}
}
}
for(i=0;i<10;i++){ //punem restul cifrelor
while(v[i]>0){
n=n*10+i;
v[i]--;
}
}
return n; // tadaaaaaam asta a fost magia
}

#904 Concat
Cerina
S se scrie o funcie C++ care primete doi parametri a i b i returneaz numrul
obinut prin concatenarea lui a cu b.

Restricii i precizri
numele funciei va fi concat
funcia va avea un doi parametri, a b, n aceast ordine
valoarea obinut prin concatenarea lui a cu b va fi returnat de ctre funcie
att parametrii, ct i rezultatul sunt numere naturale cu cel mult nou cifre

int concat(int a, int b)


{ int x=0,p=1,i,b2,nrcf=0;;
x=a;
b2=b;
while(b2)
{nrcf++;
b2/=10;}
for(i=1;i<=nrcf;i++)
p=p*10;
x=x*p+b;
return x;
}

#14 Primalitate
S se scrie o funcie C++ care verific dac un numr natural transmis ca parametru
este prim.

Restricii i precizri
numele funciei scrise este prim
funcia are un parametru, numr natural; valoarea sa va fi mai mic
dect 1000000000
rezultatul funciei este 1 dac valoarea parametrului este numr prim,
respectiv 0 n caz contrar

int prim(int n)
{ int d=2,pr=1;
if(n==0 || n==1) return 0;
for(d=2;d*d<=n && pr==1;d++)
if(n%d==0) pr=0;
if(pr==0) return 0;
return 1;
}

#16 Suma divizorilor


Cerina
S se scrie o funcie C++ care s determine suma divizorilor unui numr natural
transmis ca parametru. Funcia va returna rezultatul.

Restricii i precizri
numele funciei va fi sum_div
funcia va avea un singur parametru, cu valoarea mai mic
dect 2000000000, reprezentnd numrul pentru care se calculeaz suma
divizorilor
suma divizorilor parametrului va fi returnat de funcie

int sum_div(int n)
{ int d=2,s=1+n;
if(n==1) return 1;
for(d=2;d*d<=n;d++)
if(n%d==0){ s=s+d;
if(d!=n/d) s=s+n/d;}
return s;
}

#67 AproapePrim
S se scrie o funcie C++ care verific dac un numr natural transmis ca parametru
este aproape prim. Un numr natural este aproape prim dac se poate scrie ca
produs de dou numere prime distincte.

Restricii i precizri
numele funciei scrise este a_prim
funcia are un parametru, numr natural, a crui valoare este mai mic dect
2 31
rezultatul funciei este 1 dac valoarea parametrului este aproape prim,
respectiv 0 n caz contrar

Exemplu
Numrul 14 este aproape prim, deoarece 14=2*7, iar 2 i 7 sunt numere prime.

int a_prim(int num){


int ok=0,c,nr=0,d,i;

for(c=2;c*c<=num && nr==0;c++) { //gasim primul divizor prim


if (num%c==0 && num/c!=c){ //verificam ca diviz sa fie
diferiti
for(d=2; d*d<=num/c && nr==0; d++)
if((num/c)%d==0) nr=1; //verificam sa nu existe mai multi
divizori primi in produs, devenind produs de numere compuse
if(nr==0) return 1; //returnam 1 daca a fost gasit nr
aproape-prim
nr=1;

}}
return 0;}

#902 Factorial2
Cerina
S se scrie o funcie C++, cu un parametru, n, care returneaz cel mai apropiat
numr de n care este factorialul unei valori.

Restricii i precizri
numele funciei va fi det
funcia va avea un singur parametru, n
0 n 10.000.000
dac exist mai multe numere care sunt factoriale ale unor valori i sunt la fel
de apropiate de n, funcia l va returna pe cel mai mic

det(24) = 24, det(44) = 24, det(100) = 120, det(72)=24


int det(int n){
int i,f=1;
i=1;
if (n==0) return 1;
while (n>f) { //cautam factorialul mai mare ca n
f=f*i;
i++;
}
if (n-(f/(i-1))>f-n) return f; //vedem daca factorialul mai mare ca n e mai
mic ca celalalt
else return f/(i-1); // daca nu il returnam pe celalalt

#1501 numere_norocoase
Se spune despre numrul natural nenul nc este norocos dac numrul n2 se poate
scrie ca suma a n numere naturale nenule consecutive. De exemplu, 7 este
norocos, deoarece 72=4+5+6+7+8+9+10.
Cerina
Scriei n limbajul C/C++ definiia complet a funciei norocoase, care primete
ca argumente dou numere naturale a i b i returneaz cte numere norocoase se
afl n intervalul [a, b].

Restricii i precizri

1 a < b 10 9
numele funciei este norocoase
parametrii sunt, n aceast ordine: a, b

Exemplu:
norocoase(1, 15) = 8

int norocoase(int a, int b){ // Buna ziua doamna profesoara


int i, nr=0, inloc; //pentru ca initial am corelat
if(a%2==1 && b%2==1){ //codul cu o progresie aritmetica, am descoperit ca
nr trebuie sa fie fix in mijloc
nr=(b-a)/2+1; // si sa fie impar
} //deci ca sa nu ma lunges in cod am facut pur si simplu calculul a cate
nr impare sunt in interval
else if(a%2==0 && b%2==0){ //si asta a fost algoritmul
nr=(b-a)/2; //si problema e medie cica
} //ce-i drept daca nu te prinzi de asta faci destul de mult cre
else{

nr=(b-a)/2+1;
}

return nr;

#34 Interval
Cerina
Scriei definiia complet a subprogramului C++ interval care
are 2 parametri: a, prin care primete un tablou unidimensional cu
maximum 100 de numere naturale mai mici dect 1000 i n, numrul efectiv de
elemente ale tabloului.
Subprogramul returneaz numrul de elemente din tablou care aparin intervalului
nchis determinat de primul i ultimul element al tabloului.

Restricii i precizri
0 < n <= 100
numele subprogramului cerut este interval
parametrii sunt, n aceast ordine: a, n
elementele vectorului a sunt indexate de la zero

Exemplu
Dac n=6 i a=(63,273,9,83,93,123) subprogramul va returna valoarea 4.
int interval(int a[100], int n){
int i, nr=0, inloc;
if(a[0]>a[n-1]){ //verificam ca primul capat sa fie mai mic
inloc=a[0]; //ca celalalt, daca nu le inversam
a[0]=a[n-1];
a[n-1]=inloc;
}
for(i=1; i<n-1; i++){ //verificam ca numerele sa apartina intervalului
if(a[i]>=a[0] && a[i]<=a[n-1])
nr++;}
return nr+2; //returnam nr de numere+ capetele pentru ca este interval
inchis
//Pampampaaaaam
}

#35 Count
Cerina
Scriei definiia complet a subprogramului C++ count care are 2 parametri: a,
prin care primete un tablou unidimensional cu maximum 100 de numere reale mai
mici dect 1000 i n, numrul efectiv de elemente ale tabloului.
Subprogramul returneaz numrul de elemente din tablou care sunt mai mari sau
cel puin egale cu media aritmetic a tuturor elementelor din tablou.
Restricii i precizri
0 < n 100
numele subprogramului cerut este count
parametrii sunt, n aceast ordine: a, n
elementele vectorului a sunt indexate de la zero
pentru datele reale se va folosi tipul double. Utilizarea altor tipuri poate
duce la erori de compilare.

Exemplu
Dac n=6 i a= (12, 7.5, 6.5, 3, 8.5, 7.5) subprogramul va returna
valoarea 4, deoarece media aritmetic este 7.5, iar n tablou sunt 4 elemente cel
mult egale cu aceast valoare.
int count (double a[100],int n) {

int i,c=0;
double m=0;
for (i=0;i<n;i++)
m=m+a[i]; // facem suma elementelor din vector
m=m/n; // o impartim la numarul de elemente
for (i=0;i<n;i++)
if (a[i]>=m) c++; // vedem ce elemente din vector sunt mai mari ca media
aritmetica si crestem contorul
return c; //returnam contorul
}

#802 SumImpK
Cerina
Scriei definiia complet a subprogramului C++ sub care are 3 parametri: n prin
care primete un numr natural, v, prin care primete un tablou unidimensional
cu n elemente, numere naturale cu cel mult 4cifre i k, prin care primete un numr
natural.
Subprogramul returneaz suma primelor kelemente cu valoare impar ale tabloului.
Dac nu exist k elemente impare n tablou, subprogramul returneaz valoarea -1.
Restricii i precizri
2<n<50
1<kn
numele subprogramului cerut este sub
parametrii sunt, n aceast ordine: n, v, k
elementele tabloului v sunt indexate de la zero

Exemplu
Dac n=8, v=(2, 7, 6, 8, 3, 7, 5, 1), k=3, atunci subprogramul
returneaz valoarea 17 (7+3+7=17).
int sub(int n, int v[50], int k){
int i,cont=0,sum=0;
for(i=0; i<n && cont <k; i++){ // parcurgem vectorul atata timp cant contorul
nu a ajuns la caloarea lui k
if(v[i]%2==1){ //selectam doar numerele impare
sum+=v[i]; //le adunam
cont++; //crestem contorizarea

}}
if(k==cont) return sum;//afisam suma daca s-au facut k numere
return -1; // daca nu suntem pe minus
//gata
}

#901 OrdonareSecvF
Cerina
Scriei definiia complet a subprogramului C++ ordonare care
are 4 parametri: a, prin care primete un tablou unidimensional cu
maximum 1000 de numere naturale mai mici dect 1.000.000.000 i n,
numrul efectiv de elemente ale tabloului i doi indici st dr.
Subprogramul ordoneaz cresctor elementele tabloului a cu indici ntre st i dr,
inclusiv acetia,fr a modifica celelalte elemente ale tabloului.

Restricii i precizri
0 < n <= 1000
numele subprogramului cerut este ordonare
parametrii sunt, n aceast ordine: a, n, st, dr
0stdr<n
elementele tabloului a sunt indexate de la zero

Exemplu
Dac n=6, a=(63,273,9,83,93,123), st=1 i dr=3 dup apelul
subprogramului tabloul a devine (63,9,83,273,93,123).
void ordonare (int a[1000],int n, int st,int dr) {
int i,j,aux;
for (i=st;i<=dr;i++) { //sortam elementele
for (j=i+1;j<=dr;j++)
if (a[j]<a[i]) { aux=a[i];
a[i]=a[j];
a[j]=aux;

}
}
}

#972 Pozitii
Cerina
Se d un ir de caractere. S se determine cte vocale din ir sunt cuprinse ntre
dou consoane.

Date de intrare
Programul citete de la tastatur un sir de caractere.

Date de ieire
Programul va afia pe ecran valoarea cerut.

Restricii i precizri
irul va avea cel mult 255 caractere
irul nu va conine litere mari

Exemplu
Intrare

oasele sunt fragile

Ieire

#include <iostream>
#include <cstring>
using namespace std;
char v[]="aeiou",s[256];

int main()
{
cin.get(s,256);
int c=0,i;
for(i=1;i<strlen(s)-1;i++)
if((s[i-1]>'a'&&s[i-1]<='z'&&!strchr(v,s[i-
1]))&&strchr(v,s[i])&&(!strchr(v,s[i+1])&&s[i+1]>'a'&&s[i+1]<='z'))
c++;
cout<<c;
return 0;
}

#11 Vocale
Se d un ir de cel mult 20 caractere ce conine numai litere mici ale alfabetului
englez.

Cerina
S se afieze irul obinut prin nlocuirea fiecrei vocale cu litera mare
corespunztoare.

Date de intrare
Programul va citi de la tastatur irul dat.

Date de ieire
Programul va afia pe ecran irul transformat corespunztor.

Restricii i precizri
se consider vocale literele din multimea {a,e,i,o,u}

Exemplu
Intrare

romancier

Ieire

rOmAncIEr

#include <iostream>
#include <string.h>
using namespace std;
char v[]="aeiou";
int main()
{ char s[21];
int i;
cin.get(s,21);
for(i=0;i<strlen(s);i++)
if(strchr(v,s[i])!=0)
s[i]=s[i]-'a'+'A';

cout<<s;
return 0;
}

#12 Initiale
Se d un ir de caractere reprezentnd o propoziie format din litere mici ale
alfabetului englez i spaii.

Cerina
Transformai irul dat astfel nct prima i ultima liter a fiecrui cuvnt s fie
nlocuite cu litera mare corespunztoare.
Date de intrare
Programul citete de la tastatur propoziia dat.

Date de ieire
Programul afieaz pe ecran propoziia transformat.

Restricii i precizri
irul de caractere citit conine cel mult 255 de caractere

Exemplu
Date de intrare

mare frig rosu

Date de ieire

MarE FriG RosU

#include <iostream>
#include <cstring>

using namespace std;

char litere[80]={'a','s','d', 'f', 'g', 'h', 'j', 'k', 'l',


'z','x','c','v','b','n','m','q','w','e','r','t','y','u','i','o','p'};
int main()
{ int i,incuv=0, nrlit=0;
char v[266];
cin.get(v,265);
int lung=strlen(v);
for(i=0;i<lung;i++){
if(incuv==0&& v[i]!=' '){
v[i]=v[i]- 'a' + 'A';
incuv=1;

}
else if(incuv==1 && v[i]==' ' && v[i-1]<'a' ){

incuv=0;
}
else if(incuv==1 && v[i]==' ' && v[i-1]>='a' ){
v[i-1]=v[i-1]+ 'A' - 'a';
incuv=0;
}
if(v[lung-1]>='a'){
v[lung-1]=v[lung-1]-'a'+'A';
}
}

cout<<v;
return 0;
}

#1866 prosir
Cerina
Se consider fiierul prosir.in care conine pe primul rnd un text format din cel
mult 199 de caractere litere mici i spaii. Cuvintele din text sunt separate prin unul
sau mai multe spaii.
S se modifice textul citit din fiier prin nlocuirea ultimei litere a fiecrui cuvnt cu
cifra 5. Textul modificat se va afia pe ecran.

Date de intrare
Fiierul de intrare prosir.in conine pe prima linie irul de caractere.

Date de ieire
Fiierul de ieire prosir.out va conine pe prima linie irul modificat conform
cerinei.

Restricii i precizri
lugimea irului citit este maximum 200
ultimul cuvnt din text se termin cu caracterul .

Exemplu
prosir.in

ana are multe mare si o gutuie.


prosir.out

an5 ar5 mult5 mar5 s5 5 gutui5.

#include <iostream>
#include <cstring>
#include <fstream>
using namespace std;
char s[205];
int main()
{ int i;
ifstream fin("prosir.in");
ofstream fout("prosir.out");
fin.get(s,205);
for(i=0;i<strlen(s);i++){
if(s[i]>='a' && s[i]<='z'){
if(s[i+1]==' ' || s[i+1]=='.' || s[i+1]=='\0'){
s[i]='5';
}
}
}
fout<<s;

return 0;
}

#1456 Cuvant
Cerina
Se consider un cuvnt format din cel puin dou i cel mult 100 de caractere,
numai litere mici ale alfabetului englez.
Scriei un program care citete de la tastatur un cuvnt de tipul precizat i afieaz
pe ecran mesajul DA n cazul n care cuvntul conine doar consoane i, eventual,
vocala i, sau mesajul NU n caz contrar.

Date de intrare
Programul citete de la tastatur un cuvnt.

Date de ieire
Programul va afia pe ecran mesajul DA n cazul n care cuvntul conine doar
consoane i, eventual, vocala i, sau mesajul NU n caz contrar.
Exemplul 1
Intrare

inscriptibil

Ieire

DA

Exemplul 2
Intrare

brr

Ieire

DA

Exemplul 3
Intrare

inestimabil

Ieire

NU

Exemplul 4
Intrare

iii

Ieire

NU

#include <iostream>
#include <string.h>
using namespace std;
char v[]="aeou";
int main()
{ char s[101];
int i,ok=0,cnt=0;
cin.get(s,101);
for(i=0;i<strlen(s) && ok==0;i++)
{if(strchr(v,s[i])!=0) {
ok=1;}
else if(strchr(v,s[i])==0)
if(s[i]=='i') cnt++;
}
if(ok==1) cout<<"NU";
else if(cnt==strlen(s)) cout<<"NU";
else cout<<"DA";
return 0;
}

#890 NrVocale
Cerina
Se d o propoziie format din litere mari i mici ale alfabetului englez, cifre, spaii i semne de
punctuaie, n care literele mari i mici se consider identice. Determinai vocala din ir cu numr
maxim de apariii.

Date de intrare
Programul citete de la tastatur un ir de caractere.

Date de ieire
Programul va afia pe ecran vocala determinat, liter mare.

Restricii i precizri
irul citit va avea cel mult 255 caractere
dac n ir exist mai multe vocale cu numr maxim de apariii, se va afia prima n
ordine alfabetic
vocalele sunt AEIOUaeiou
Exemplu
Intrare

Ana are 5 mere si trei nuci

Ieire

#include <iostream>
#include <string.h>
using namespace std;
int v[5];
int main()
{ char s[256];
int i,max=0,j;
cin.get(s,256);
for(i=0;i<strlen(s);i++){
if(s[i]=='a' || s[i]=='A') v[0]++;
if(s[i]=='e' || s[i]=='E') v[1]++;
if(s[i]=='i' || s[i]=='I') v[2]++;
if(s[i]=='o' || s[i]=='O') v[3]++;
if(s[i]=='u' || s[i]=='U') v[4]++;
}
for(i=0;i<5;i++){
if(v[i]>max){ max=v[i];}}
if(max==v[0]) cout<<"A";
else if(max==v[1]) {cout<<"E";}
else if(max==v[2]) {cout<<"I";}
else if(max==v[3]){ cout<<"O";}
else cout<<"U";

return 0;
}

#84 InterschimbareLitere
Cerina
S se scrie un program care citete un cuvnt i l afieaz dup interschimbarea
primei vocale cu ultima consoan.

Date de intrare
Programul citete de la tastatur un ir de caractere, reprezentnd un cuvnt.
Date de ieire
Programul afieaz pe ecran cuvntul obinut prin interschimbarea primei vocale cu
ultima consoan.

Restricii i precizri
irul de caractere citit va conine cel mult 10 caractere, litere mari i mici ale
alfabetului englez
se consider vocale urmtoarele caractere: a e i o u A E I O U.
dac cuvntul conine doar vocale sau doar consoane se va
afia IMPOSIBIL

Exemplu
Date de intrare

PrograM

Date de ieire

PrMgrao

#include <iostream>
#include <string.h>
using namespace std;
char v[]="aeiouAEIOU";
int main()
{ char s[11],aux;
int i,j,pozv=0,pozc=0,ok=0,vocex=0,consex=0;
cin.get(s,11);
for(i=0;i<strlen(s)&&vocex==0;i++)
if(strchr(v,s[i])!=0) {
pozv=i;
vocex=1;}
for(i=strlen(s)-1;i>=0&& consex==0;i--)
if(strchr(v,s[i])==0){
pozc=i;
consex=1;}
if(pozc==0 || pozv==0){
cout<<"IMPOSIBIL"; ok=1;}
else
{
aux=s[pozv];
s[pozv]=s[pozc];
s[pozc]=aux;
}
if(ok==0) cout<<s;

return 0;

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