Sunteți pe pagina 1din 8

Probleme marire nota

1. Scrieți un program care citește un număr natural nenul n și care calculează suma
tuturor numerelor distincte prefixe pentru n.
#include <iostream>
using namespace std;
long long int x,s = 0;
int main()
{
cin >> x;
while(x != 0){
s += x;
x /= 10;
}
cout << s;
}
2. Se dă n număr natural. Aflaţi cel mai mare număr natural care are numărul de cifre
şi suma cifrelor egale cu suma cifrelor lui n.
#include <iostream>
using namespace std;
int n,s,nr9,r,i;
int main()
{
cin>>n;
while(n)
{
s=s+n%10;
n=n/10;
}
nr9=s/9;
r=s%9;
for(i=1;i<=nr9;i++)
cout<<9;
cout<<r;
for(i=1;i<=s-nr9-1;i++)
cout<<0;

return 0;
}
3. Se citește de la tastură un număr natural n, apoi n numere naturale. Să se calculeze
suma obținută prin adunarea cifrelor situate dupa prima cifra a fiecarui numar.
Daca numarul nu are 2 cifre acesta nu se va prelucra.

#include <iostream>
using namespace std;
int n,m,s=0,i;
int main()
{
cin>>n;
for(i=1;i<=n;i++)
{
cin>>m;
while(m/10!=0)
m=m/10;
s=s+m;
}
cout<<s;
}
4. Se citesc n numere naturale, să se pe afișeze pe câte o linie, fiecare pereche de
numere consecutive care au ultima cifră egală cu prima cifra a numărului urmator.
#include <iostream>
using namespace std;
int n,i,x,y;
int pc(int x)
{
while(x>9)
x=x/10;
return x;
}
int main()
{
cin>>n>>x;
for(i=2;i<=n;i++)
{
cin>>y;
if(x%10==pc(y))
cout<<x<<' '<<y<<endl;
x=y;
}
return 0;
}
5. Se dau mai multe numere naturale. Determinaţi cel mai mare număr palindrom aflat
printre numerele date şi de câte ori apare.
using namespace std;
int main()
{
int n, f=0, maxi=-1;
cin>>n;
while (n) {
int p =n, s=0;
while (p) {
s=s*10+p%10;
p/=10;
}
if (s==n)
if (n>maxi) {
maxi =n;
f=1;
}
else if (n==maxi) f++;
cin>>n;
}
if (f) cout<<maxi<<" "<<f;
else cout<<"NU EXISTA";
return 0;
}
6. Se dau mai multe numere naturale. Determinaţi cel mai mare număr palindrom aflat
printre numerele date şi de câte ori apare.
#include<iostream>
using namespace std;
int main()
{
int n, f=0, maxi=-1;
cin>>n;
while (n) {
int p =n, s=0;
while (p) {
s=s*10+p%10;
p/=10;
}
if (s==n)
if (n>maxi) {
maxi =n;
f=1;
}
else if (n==maxi) f++;
cin>>n;
}
if (f) cout<<maxi<<" "<<f;
else cout<<"NU EXISTA";
return 0;
}
7. Se dă un număr natural n despre care știm că are număr impar de cifre. Să se afișeze
valoarea obținută prin eliminarea cifrei din mijloc.
#include <iostream>
using namespace std;
int n,nr,nr1,x,t,Nr=0;
int oglindit(int x)
{
int ogl=0;
while(x!=0)
{
ogl=ogl*10+x%10;
x=x/10;
}
return ogl;
}
int main()
{
cin>>n;
nr=0;
x=n;
while(x!=0)
{
nr++;
x=x/10;
}
nr1=0;
while(n!=0)
{
t=n%10;
nr1++;
if(nr1!=(nr/2)+1)
{
Nr=Nr*10+t;
}
n=n/10;
}
cout<<oglindit(Nr);
}
8. Se citește un număr natural n. Determinați cel mai mare număr care se poate obține
prin eliminarea unei singure cifre din scrierea numărului n.
#include <iostream>
using namespace std;
int main()
{
int numar, cifre[20], numarCifre = 0, nrMax = 0;
cin >> numar;
while(numar > 0) {
cifre[ ++numarCifre ] = numar % 10;
numar /= 10;
}
for(int i = 1; i <= numarCifre; i++)
{
int numarNou = 0;
for(int j = numarCifre; j >= 1; j--)
{
if(i != j)
numarNou = numarNou * 10 + cifre[j];
}
if(numarNou > nrMax)
{
nrMax = numarNou;
}
}
cout << nrMax;
return 0;
}
9. Se dau n numere naturale. Se construiește o valoare selectând de la fiecare număr
cifra maximă. Determinați pătratul acestei valori.
#include <iostream>
using namespace std;
int main()
{
int n, i, cif, cifmax;
long long num, rez=0;
cin >> n;
for (i=1; i<=n; ++i)
{
cin >> num;
cifmax=0;
while (num)
{
cif=num%10;
if (cif>cifmax) cifmax=cif;
num/=10;
}
rez=rez*10+cifmax;
}
rez*=rez;
cout << rez;
return 0;
}
10. Se citește un număr natural n. Să se determine suma cifrelor aflate pe poziții impare.
Numărarea pozițiilor în numărul dat se face începând de la prima cifră.
#include <iostream>
using namespace std;
int nrcifre(int n) {
if(n == 0) return 0;
return 1 + nrcifre(n / 10);
}
int suma_impare(int n, bool b) {
if (n == 0) return 0;
if (b) return n % 10 + suma_impare(n / 10, !b);
return suma_impare(n / 10, !b);
}
int main() {
int n;
cin >> n;
cout << suma_impare(n, nrcifre(n) % 2);
return 0;
}
11. Se citește un număr natural n, n>1. Să se determine câte perechi (a,b), 1 ≤ a < b ≤ n
de numere naturale sunt prime între ele.
#include<iostream>
using namespace std;
int cmmdc(int a,int b)
{
int r=a%b;
while(r!=0)
{
a=b;
b=r;
r=a%b;
}
return b;
}

int main()
{
int n,a,b,c;
cin>>n;
c=0;
for(a=1;a<n;a++)
for(b=a;b<=n;b++)
if(cmmdc(a,b)==1)
c++;
cout<<c;
}
12. Se dau n numere naturale. Determinați câte dintre ele au proprietatea că sunt prime
cu oglinditul lor.
#include <iostream>
using namespace std;
int n,x,j,k;
int cmmdc(int d, int i)
{
int r=d%i;
while(r)
{
d=i;
i=r;
r=d%i;
}
return i;
}
int oglindit(int nr)
{
int ninv=0;
while(nr)
{
ninv=ninv*10+nr%10;
nr=nr/10;
}
return ninv;
}
int main()
{
cin>>n;
for(j=1;j<=n;j++)
{
cin>>x;
if(cmmdc(x,oglindit(x))==1) k++;
}
cout<<k;
return 0;
}
13. Să se scrie un program care citește un șir de n numere naturale şi determină cea mai
mare fracţie care poate fi scrisă cu numărătorul şi numitorul dintre cele n numere.

#include <iostream>
using namespace std;
int main()
{
int n, x, min, max;
cin >> n >> x;
min = max = x;
for(int i=1; i<n; i++)
{
cin >> x;
if (x < min)
min = x;
if (x > max)
max = x;
}
int a = min, b = max;
while(b)
{
int c = a%b;
a = b;
b = c;
}
cout << min/a << "/" << max/a;
return 0;
}

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