Sunteți pe pagina 1din 22

PROBLEME

INFORMATICA
CUPRINS
I. PROBLEME SUBPROGRAM
PROBLEMA 1
SUBPROGRAMUL CIF CU 2 PARAMETRII PRIMESTE PRIN INTERMEDIUL PARAMETRULUI A

UN NUMAR NATURAL CU CEL MULT 8 CIFRE SI PRIN INTERMEDIUL PARAMETRULUI B

O CIFRA. SUBPROGRAMUL RETURNEAZA NUMARUL DE APARITII ALE CIFREI B IN

SCRIEREA NUMARULUI A.

A)SCRIETI DEFINITIA COMPLETA A SUBPROGRAMULUI CIF.

B)SCRIETI UN PROGRAM C++ CARE CITESTE DE LA TASTATURA UN NUMAR NATURAL N

CU EXACT 8 CIFRE SI CARE DETERMINA SI AFISEAZA PE ECRAN FOLOSIND APELURI

ALE SUBPROGRAMULUI CIF CEL MAI MARE NUMAR PALINDROM CE POATE FI OBTINUT

PRIN REARANJAREA CIFRELOR LUI N. DACA NU SE POATE OBTINE , PROGRAMUL VA AFISA

VALOAREA 0.
#INCLUDE<IOSTREAM>
USING NAMESPACE STD;
INT CIF(LONG A,INT B)
{INT K=0;
WHILE(A!=0)
{IF(B==A%10) K++;
A=A/10;}
RETURN K;}
INT N, INV,OK,I,NR,AUX;
INT MAIN()
{DO (CIN>>N);
WHILE(N<10000000 || N>99999999);
OK=1;
FOR(I=9;I>=0 &&OK==1; I--)
{IF (CIF(N,I)%2==0)
FOR(INT K=1;K<=CIF(N,I)/2;K++)
NR=NR*10+I;
ELSE OK=0;}
IF(OK==1){AUX=NR;
WHILE(NR!=0)
{INV=INV*10+NR%10;
NR=NR/10;}
NR=AUX*10000+INV;
COUT<<NR;}
ELSE COUT<<0;
RETURN 0;}
PROBLEMA 2

DIN FISIERUL TIP1.IN SE CITESTE UN NR NAT N CU MAXIM 9 CF NENULE SI O CF K. SA SE SCRIE


FISIERUL TIP1.OUT

RASPUNSUL LA URM CERINTE :

A. NR CARE SE OBTINE DIN ELIMINAREA TUTUROR CF CU VAL K DIN X(SE VA FOLOSI O FC)

B. CEL MAI MARE NR MAI MIC DECAT N CARE ESTE O PUTERE A LUI K

EX :

DIN:

1231 2

DIESIRE :

131

1024
#INCLUDE <IOSTREAM> int ok=1,k,m=1,aux;
#INCLUDE <FSTREAM>
USING NAMESPACE STD;
long n;
LONG NR(LONG A,INT K) fin>>n>>k;
{ aux=n;
INT X=0,P=1; fout<<nr(n,k)<<endl;
WHILE(A)
{
while(aux)
IF(A%10!=K) if(aux%k==0)
{ aux=aux/k;
X=X+(A%10)*P; else aux=0;
P=P*10;
}
if(aux==1)fout<<n;
A=A/10; else {while(ok)
} {
RETURN X; if(m>n)ok=0;
}
INT MAIN ()
else m=m*k;
{ }
IFSTREAM FIN("TIP1.IN"); m=m/k;
OFSTREAM FOUT("TIP1.OUT"); fout<<m;}
fin.close ();
fout.close ();
return 0;
}
PROBLEMA 3
DIN FIS "CMMDC3.IN" SE AFLA PE PRIMA LINIE UN NR NAT NENUL
N 5<N<30 PE CEA DE A DOUA LINIE SUNT
SCRISE NR NAT SEPARATA PRIN CATE UN SPATIU FORMATE DIN CEL MULT 4 CF , SA
SE REALIZEZE UN PRGR C++
CARE SA SCRIE IN FIS ATESTAT.OUT :
A)PE PRIMA LIN SEPARATE PRINTR-UN SPATIU NR CIF NR IMPARE DIN SIR
B) PE URM LINIE CEL MAI MARE DIV COMUN DINTRE EL MIN SI CEL MAX DIN SIR
EX
CMMDC3.IN :
6
1232 243 98 3 242 27
ATESTAT.OUT :
312
3*/
int cmmdc(int a, int b)
{
#include <iostream> int r=a%b;
#include <fstream> while(r!=0)
using namespace std; {
ifstream fin("cmmdc3.in"); a=b;
ofstream fout("atestat.out"); b=r;
int nc(int a) r=a%b;
{ }
int k=0; return b;
while(a) }
{ int mx(int v[31],int n)
k++; {
a=a/10; int mx=v[1];
} for(int i=1;i<=n;i++)
return k; if(v[i]>mx)mx=v[i];
} return mx;
}
int mn(int v[31],int n)
{
int mn=v[1];
for(int i=1;i<=n;i++)
if(v[i]<mn)mn=v[i];
return mn;
}
int main ()
{
int n,x,i,v[31];
fin>>n;
for(i=1;i<=n;i++)
fin>>v[i];
for(i=1;i<=n;i++)
if(v[i]%2!=0)fout<<nc(v[i])<<" ";
fout<<endl;
fout<<cmmdc(mx(v,n),mn(v,n));
fin.close ();
fout.close ();
return 0;
}
PROBLEMA 4

SE CITESTE DE LA TASTATURA UN VECTOR V CU N CUPRINS INTRE 1 SI 100

ELEMENTE NUMERE NATURALE. SCRIETI O FUNCTIE CARE RETURNEAZA VALOAREA EXPRESIEI

PC(V[1])+PC(V[2])+...+P(V[IN]) UNDE PC(V[I]) REPREZINTA PRIMA CIFRA A ELEMENTULUI.

PENTRU EXTRAGEREA PRIMEI CIFRE A UNUI NUMAR NATURAL SE VA FOLOSI O ALTA FUNCTIE,

SCRIETI UN PROGRAM C++ COMPLET.


#include<iostream>
using namespace std;
int pc(int x)
{while(x>9)
x=x/10;
return x;}
int suma(int n,int v[20])
{int s=0;
for(int i=1;i<=n;i++)
s=s+pc(v[i]);
return s;}
int main()
{int v[20],i,n;
cin>>n;
for(i=1;i<=n;i++)
cin>>v[i];
cout<<suma(n,v);
return 0;}
PROBLEMA 5

FISIERUL TEXT "NUMERE.IN" CONTINE PE PRIMA LINIE UN NUMAR NATURAL N,

IAR PE A DOUA LINIE N NUMERE NATURALE CU CEL MULT 9 CIFRE FIECARE.

SCRIETI UN PROGRAM CARE:

A) VERIFICA DACA NUMERELE SUNT IN ORDINE CRESCATOARE SI SCRIE PE PRIMA LINIE

A FISIERULUI :NUMERE.OUT" MESAJUL "DA" SAU "NU"(SE VA FOLOSI O FUNCTIE)

B) SA SE SCRIE PE A DOUA LINIE CEL MAI MARE NUMAR CARE SE POATE FORMACU PRIMA CIFRA

A FIECARUI NUMARULUI DE PE A DOUA LINIE A FISIERULUI "NUMERE.IN".

SE VA FOLOSI O FUNTIE CARE VA RETURNA PRIMA CIFRA A UNUI NUMAR.


#include<iostream> for(i=1;i<=n;i++)
#include<fstream> fin>>v[i];
using namespace std; if(verificare(v,n)==1) fout<<"da";
int verificare(int v[20], int n) else fout<<"nu";
{ for(int i=1;i<n;i++) fout<<endl;
if(v[i]>v[i+1]) return 0; for(i=9;i>=0;i--)
return 1;} for(j=1;j<=n;j++)
int primacif(int a) if(primacif(v[j])==i)
{ while(a>9) a=a/10; nr=nr*10+i;
return a;} fout<<nr;
int main() fin.close();
{ int n,v[20],i,j; fout.close();
long long nr=0; return 0;}
ifstream fin("numere.in");
ofstream fout("numere.out");
fin>>n;
PROBLEMA 6

SE DAU DOUA MULTIMI CU N ELEMENTE FIECARE DEFINITE CA VECTOR. SA SE AFISEZE

INTERSECTIA CELOR 2 MULTIMI . PROGRAMUL VA CONTINE CATE O FUNCTIE PENTRU CITIREA,

AFISAREA VECTORULUI SI O FUNCTIE CARE VERIFICA DACA O VALOARE DATA CA PARAMETRU

SE GASESTE PRIN ELEMENTELE

UNUI VECTOR
#include<iostream> int main()
using namespace std; {int k=1,a[100], b[100], i, j
void citire(int n, int v[100]) ,n,x,p[100];
{for(int i=1;i<=n;i++) cout<<"dati n";
{cout<<"v["<<i<<"]="; cin>>n;
cin>>v[i];}} citire(n,a);
citire(n,b);
void scriere(int v[100], int n) for(i=1;i<=n;i++)
{for(int i=1;i<=n;i++) {x=a[i];
cout<<v[i]<<" ";} if(verificare (x,n,b)==1)
{p[k]=x;
int verificare(int x,int n,int v[100]) k++;}}
{int i; scriere (p,k-1);
for(i=1;i<=n;i++) return 0;}
if(v[i]==x) return 1;
return 0;}
PROBLEMA 7
ZI=->MAX((X1+X2+...+XI)/I,YI) DACA YI>=0

->MAX((Y1+Y2+...+YI)/I,X1) DACA YI<0

3 FCT :

A. SUMA

B. MAX

C. Z

EX :

34 53 4 12 22

78 2 10 19 21

=> 78 25 25 25 25
void zi(int a[51],int b[51],int i,int z[51])
{
for(int j=1;j<=i;j++)
#include <iostream> if(b[j]>=0)z[j]=mx(suma(i,a)/i,b[j]);
using namespace std; else z[j]=mx(a[1],suma(i,b)/i);
int suma(int i,int a[51]) }
{ int main ()
int s=0; {
for(int j=1;j<=i;j++) int x[51],y[51],i,n,z[51];
s=s+a[j]; cin>>n;
return s; for(i=1;i<=n;i++)
} cin>>x[i];
int mx(int a,int b) for(i=1;i<=n;i++)
{ cin>>y[i];
int nr; zi(x,y,n,z);
if(a>=b)nr=a; for(i=1;i<=n;i++)
else nr=b; cout<<z[i]<<" ";
return nr; return 0;
} }
PROBLEMA 8

FISIERUL ATESTAT8.IN CONTINE PE PRIMA LINIE UN NR NAT NENUL N, SI PE A DOUA LINIE N


NUMERE NATURALE.

SCRIETI UN PROGRAN C++ CARE CITESTE DIN ATESTAT.IN NUMARUL N SI APOI CELE N NUMERE SI
CARE SCRIE

IN ATESTAT8.OUT :

A) PE PRIMA LINIE, MEDIA ARITMETICA A NUMERELOR DE PE POZITII IMPARE DIN SIR(SE VA


FOLOSI O FUNCTIE).

B)PE A DOUA LINIE, IN ORDINE CRESCATOARE ELEM. DISTINCTE ALE SIRULUI(SE VA FOLOSI O
FUNCTIE PT ORDONARE).
void ordonare(int n, int v[10]) {
#include<iostream> { int i,n,v[10],ma;
#include<fstream> int i,j,aux; ifstream fin ("atestat8.in");
using namespace std; for(i=1;i<=n-1;i++) ofstream fout ("atestat8.out");
float medart(int n, int for(j=i+1;j<=n;j++) fin>>n;
v[10]) if(v[i]>v[j]){aux=v[i]; for(i=1;i<=n;i++)
{ v[i]=v[j]; fin>>v[i];
int i,s=0,k=0; v[j]=aux;} fout<<medart(n,v);
for(i=1;i<=n;i=i+2) } fout<<endl;
{ int main() ordonare(n,v);
s=s+v[i]; for(i=1;i<=n-1;i++)
k++; if(v[i]!=v[i+1]) fout<<v[i]<<"
} ";
return 1.*s/k; if(v[n-1]!=v[n]) fout<<v[n]<<" ";
} fin.close();
fout.close();
return 0;
}
#include<iostream>
using namespace std; PROBLEMA 9
void citire(int a[100], int n)
{for(int i=1;i<=n;i++) void reuniune(int a[100],int n, int b[100],int m, int c[100])
{cout<<"v["<<i<<"]="; {int p=m+n,i;
cin>>a[i];} citire (a,n);
} citire (b,m);
for( i=1;i<=n;i++)
void afisare(int a[100], int n) c[i]=a[i];
{for(int i=1;i<=n;i++) for(i=n+1 ;i<=m; i++)
cout<<a[i]<<" ";} c[i]=b[i-n];
for(i=1;i<p;i++)
void ordonare(int a[100], int n) for(int j=i+1;j<=p;j++)
{int aux, i, j; {if(c[i]==c[j])
for(i=1;i<n;i++) {for(int k=j;k<p;k++)
for(j=i+1;j<=n;j++) c[k]=c[k+1];
if(a[i]>a[j]){aux=a[i]; p--;}}
a[i]=a[j]; ordonare(c,p);
a[j]=aux;}} afisare(c,p);}
void diferentaa(int a[100], int b[100], int n, int m,int c[100])
void intersectie(int a[100], int n, int b[100], int m, int c[100]) {int k=1;
{int k=1,i,j; for(int i=1;i<=n;i++)
for( i=1;i<=n;i++) {int ok=1;
for( j=1;i<=m;j++) for(int j=1;j<=m && ok==1;j++)
if(a[i]==b[j]) {c[k]=a[i]; k++;} if(a[i]==b[j]) ok=0;
k--; if(ok==1) {c[k]=a[i];k++;}}
for(i=1;i<k;i++) k--;
for(j=i+1;i<=k;j++) afisare(c,k);}
if(c[i]==c[j])
{for(int x=j;x<k;x++) void diferentab(int a[100], int b[100], int n, int m,int c[100])
c[x]=c[x+1]; {int k=1;
k--;} for(i=1;i<=m;i++)
afisare(c,k);} {int ok=1;
for(int j=1;j<=n;&& ok==1;j++)
if(b[i]==b[j]) ok=0;
if(ok==1) {c[k]=b[i]; k++;}}
k--;
afisar e(c,k);}
int main()
{int a[100], b[100],n,m,i,opt;
cout<<"dati n si m";
cin>>n>>m;
citire(a,n);
citire(b,n);
cin>>opt;
switch(opt)
{case 1: {cout<<"Reuniune"<<endl ; reuniune(a,n,b,m,c);} break;
case 2: {cout<<"Intersectie"<<endl; intersectie(a,n,b,m,c);} break;
case 3:{cout<<"A-B"<<endl; diferentaa(a,b,n,m,c);} break;
case 4:{cout<<"B-A"<<endl;diferentab(a,b,n,m,c);} break;}
return 0;}

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