/**
* Problema 1
*/
#include <stdio.h>
int nrcf(long int n)
{
int nr = 0;
while (n > 0) {
nr++;
n = n / 10;
}
return nr;
}
int main()
{
long int n;
scanf("%ld", &n);
printf("%d cifre\n", nrcf(n));
return 0;
}
/**
* 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 %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("dmax = %.2f ", dmax);
printf("intre (%d, %d) si (%d, %d)\n", X[imax], Y[imax], X[jmax], Y[jmax]);
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){ // functie pentru minimul dintre doi intregi
return a>b?b:a;
}
int max(int a, int b){ // functie pentru maximul dintre doi intregi
return a>b?a:b;
}
int lungime_intersectie_segmente(int a_stga, int a_drta, int b_stga, int b_drta)
{
// functia returneaza lungimea intersectiei a doua segmente (a_stga,a_drta) si (b_stga,b_drta)
// sau 0 daca cele doua segmente nu se intersecteaza
int c_stga, c_drta;
c_stga=max(a_stga, b_stga);
c_drta=min(a_drta, b_drta);
// intersectia va fi un segment cu coordonatele (c_stga,c_drta)
if (c_stga > c_drta) return 0; //intersectia este segmentul vid
return c_drta-c_stga; // intersectie nevida
}
int arie_intersectie(int x11, int y11, int x12, int y12, int x21, int y21, int x22, int y22)
{
// consideram cele doua dreptunghiuri ca fiind intervale pe axele Ox, respectiv Oy.
// in acest caz, dreptunghiul-intersectie va avea ca laturi intersectiile laturilor pe Ox,
// respectiv pe Oy a celor doua dreptunghiuri date ca parametri, iar aria este produsul
// lungimilor acestor laturi.
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);
// Atentie! Programul nu va functiona corect daca nu se introduc coltul stanga-sus, respectiv dreapta-jos in aceasta ordine.
// Coordonatele sunt in sistemul de axe xOy
printf("%d\n", arie_intersectie(x11, y11, x12, y12, x21, y21, x22, y22));
return 0;
}