Pentru fisierele sursa cu rezolvarile, verificati arhiva.
/**
 * Problema 2
 */
 
#include <stdio.h>

int cifra(int x, int c)
{
        while (x > 0) {
                if(x % 10 == c)
                        return 1;
                x = x / 10;
        }
        return 0;
}


int main()
{
        int n,  c;
        scanf("%d%d", &n, &c);
        if(cifra(n, c))
                printf("DA\n");
        else
                printf("NU\n");
        return 0;
}


/**
 * Problema 3
 */
 
#include <stdio.h>
#include <math.h>

int prim(int n)
{
        int i;
        for (i = 2; i <= sqrt(n); i++)
                if (n % i == 0)
                        return 0; // daca are un divizor nu e prim
        return 1; // daca am ajuns aici, nu s-a gasit niciun divizor
}

int main()
{
        int n, i;
        printf("n = ");
        scanf("%d", &n);

        for (i = 1; i < n / 2; i++)
                if (prim(i) && prim(n - i))
                        printf("%d+%d\n", i, n - i);
        
        return 0;
}


/**
 * Problema 4
 */
 
#include<stdio.h>

int cmmdc (int a, int b)
{
        while (a != b)
        {
                if (a > b)
                        a = a - b;
                if (b > a)
                        b = b - a;
        }
        return a;
}


int cmmmc (int a, int b)
{
        return (a * b / cmmdc (a, b));
}


int main ()
{
        int mc, x1, y1, x2, y2;
        scanf ("%d%d%d%d", &x1, &y1, &x2, &y2);
        if (y1 != y2)
        {
                mc = cmmmc (y1, y2);
                x1 = x1 * (mc / y1);
                x2 = x2 * (mc / y2);
                y1 = y2 = mc;
        }
        printf ("%d/%d\n%d/%d\n", x1, y1, x2, y2);
        fflush (stdin);
        getchar ();
}


/**
 * Problema 5
 */
 
#include <stdio.h>

int factorial(int n)
{
        int p = 1, i;
        for (i = 1; i <= n; i++)
                p *= i; // p = p * i
        return p;
}

double putere(double x, int n)
{
        double p = 1;
        int i;
        for (i = 1; i <= n; i++)
                p *= x; // p = p * x
        return p;
}

double taylor(double x, int n)
{
        double t = 1;
        int i;
        for (i = 1; i <= n; i++)
                t += putere(x, i) / factorial(i);
        return t;
}

int main()
{
        float x;
        int n;
        printf("x = ");
        scanf("%f", &x);
        printf("n = ");
        scanf("%d", &n);
        printf("e ^ %.3f = %.3f\n", x, taylor(x, n));
        return 0;
}


/**
 * Problema 6
 */
 
#include <stdio.h>
#include <math.h>

float dist(int x1, int y1, int x2, int y2)
{
        float sqrd = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);
        return sqrt(sqrd);
}

int main()
{
        int X[100], Y[100], n, i, j, imax, jmax;
        float dmax, dij;
        scanf("%d", &n);
        for (i = 0; i < n; i++)
                scanf("%d%d", &X[i], &Y[i]);

        dmax = 0;
        for (i = 0; i < n; i++)
                for (j = 0; j < n; j++) {
                        dij = dist(X[i], Y[i], X[j], Y[j]);
                        if (dij > dmax) {
                                dmax = dij;
                                imax = i;
                                jmax = j;
                        }
                }

        printf("[(%d, %d);(%d, %d)] formeaza distanta maxima %f\n", X[imax], Y[imax], X[jmax], Y[jmax], dmax);

        return 0;
}


/**
 * Problema 7
 */
 
#include <stdio.h>

int transforma(int n)
{
        int nr, i, cif, c[10] = {0}; // c[i] = de cate ori apare cifra i in numar
        while (n > 0) {
                cif = n % 10;
                c[cif]++;
                n = n / 10;
        }
        nr = 0; // noul numar
        if (c[0] != 0) { // contine 0  => descrescator
                for (cif = 9; cif >= 0; cif--) // pt fiecare cifra
                        for (i = 0; i < c[cif]; i++) // o adaugam la nr de cate ori apare
                                nr = nr * 10 + cif;
        }
        else { // crescator
                for (cif = 1; cif <= 9; cif++)
                        for (i = 0; i < c[cif]; i++)
                                nr = nr * 10 + cif;
        }
    return nr;
}

int main()
{
        int n;
        scanf("%d", &n);
        printf("%d\n", transforma(n));
        return 0;
}


/**
 * Problema 8
 */
 
#include <stdio.h>

int min(int a, int b){
        return a > b ? b : a;
}

int max(int a, int b){
        return a > b ? a : b;
}

int lungime_intersectie_segmente(int a_stga, int a_drta, int b_stga, int b_drta)
{
        int c_stga, c_drta;
        c_stga=max(a_stga, b_stga);
        c_drta=min(a_drta, b_drta);
        if (c_stga > c_drta) return 0;
        return c_drta-c_stga;
}      

int arie_intersectie(int x11, int y11, int x12, int y12, int x21, int y21, int x22, int y22)
{
        return lungime_intersectie_segmente(x11, x12, x21, x22)*lungime_intersectie_segmente(y12, y11, y22, y21);
}

int main()
{
        int x11, y11, x12, y12, x21, y21, x22, y22;
        scanf("%d%d%d%d", &x11, &y11, &x12, &y12);
        scanf("%d%d%d%d", &x21, &y21, &x22, &y22);
        printf("%d\n", arie_intersectie(x11, y11, x12, y12, x21, y21, x22, y22));
        return 0;
}