Probleme de informatică
Clasa a IX-a
Elementele de bază C++ (46)
Subprograme predefinite (1)
Fişiere text (2)
Algoritmi elementari (111)
Tablouri unidimensionale (83)
Tablouri bidimensionale (64)
Probleme diverse (13)
Clasa a X-a
Subprograme (funcții) (87)
Şiruri de caractere (50)
Tipul înregistrare (26)
Recursivitate (57)
Alocarea dinamică a memoriei (2)
Liste înlănţuite (25)
Algoritmul lui Lee (1)
Clasa a XI-a
Metoda "Divide et impera" (12)
Metoda Backtracking (86)
Metoda Greedy (6)
Programare dinamică (18)
Grafuri neorientate (40)
Grafuri orientate (38)
Arbori (33)
Clasa a XII-a
Elemente de bază C# (32)
POO în C# (14)
Programare vizuală în C# (19)
Examen de bacalaureat
Competențe digitale
Examen de atestat
Admitere UBB (18)
Subiect-admitere-2014-septembrie-informatica - Subiectul III

#include <iostream>
using namespace std;

void citire(int A[51][51], int &n)
{
    cin>>n; //citesc numarul de linii
    for(int i=1;i<=n;i++) //parcurg matricea
        for(int j=1;j<=n;j++)
            cin>>A[i][j]; //citesc elementele
}

void afisare(int A[51][51], int n)
{
    for(int i=1;i<=n;i++) //parcurg matricea
        {
            for(int j=1;j<=n;j++)
                cout<<A[i][j]<<" "; //afisez elementul
            cout<<endl;//trec la linia urmatoare
        }
}

int prim(int n)
{
    if(n==0 || n==1) return 0;// 0 si 1 nu sunt prime
    if(n%2==0 && n!=2) return 0;//numerele pare inafara de 2 nu sunt prime
    for(int d=3;d*d<=n;d=d+2) //caut divizori impari pana la radical din n
        if(n%d==0) return 0;// daca am gasit divizor atunci numarul nu este prim
    return 1;//numarul este prim
}

int superprim(int n)
{
    int c=1,p=1,x=n;
    while(x>9)
    {
        c++; //calculez numarul de cifre
        p=p*10; //si puterea asociata celei de a doua cifre din n
        x=x/10;
    }
    for(int i=1;i<=c;i++) //de c ori
    {
        if(prim(n)) return 1; //am gasit numar prim
        n=n%p*10+n/p; //duc la sfarsit prima cifra
    }
    return 0;//daca nu am gasit nici un numar prim
}

void inter(int &x, int &y)// interschimba x cu y
{
    int aux=x; x=y; y=aux;
}

void intersj(int A[51][51], int n)
{//inserschimb triunghiul de sus cu cel de jos
    for(int i=1;i<=n/2;i++) //parcurg triunghiul de sus
        for(int j=i+1;j<n+1-i;j++)
        inter(A[i][j],A[n+1-i][j]); //interchimb
}

void intersd(int A[51][51], int n)
{//inserschimb triunghiul din stanga cu cel din dreapta
    for(int i=2;i<=n-1;i++)//parcurg triunghiul din stanga
        for(int j=1;j<min(i,n+1-i);j++)
            if(superprim(A[i][j]) && superprim(A[i][n+1-j])) //daca ambele elemente sunt superprime
                inter(A[i][j],A[i][n+1-j]);//le interschimb
}


int main()
{
    int A[51][51],n;
    citire(A,n);
    intersj(A,n);
    intersd(A,n);
    afisare(A,n);
    return 0;
}

25 apr 2024
Site-ul conține 884 de probleme rezolvate
Copyright © 2009-2018 Muresan Vasile Ciprian