fbpx

Problema #3195 – Intersectie_Multimi – Rezolvari PBInfo

de Mihai-Alexandru

Cerință

Se dă o mulţime nevidă A cu n elemente numere reale. Să se afișeze elementele mulțimilor A ∩ N, A ∩ Z, A ∩ Q și A ∩ (R-Q). Numerele raţionale pot fi periodice sau neperiodice. Pentru numerele iraţionale sunt date numai primele zecimale (maxim 5), urmate de 3 puncte.

Date de intrare

Programul citește de la tastatură numărul n, apoi n numere reale.

Date de ieșire

Programul vor afișa pe câte un rând elementele mulțimilor A ∩ N, A ∩ Z, A ∩ Q și A ∩ (R-Q), separate prin câte un spațiu.

Restricții și precizări

  • 1 ≤ n ≤ 50
  • cele n numere citite vor fi mai mici decât 1.000.000.000 și mai mari decât -1.000.000.000
  • dacă una dintre mulțimile cerute este vidă se va afișa corespunzător doar mesajul Multime vida

Exemplul 1

Intrare

10
3.14... 1.41... 10000 -3.8(7) 1224 -12 324 3.27 1 6.78912345

Ieșire

10000 1224 324 1 
10000 1224 -12 324 1 
10000 -3.8(7) 1224 -12 324 3.27 1 6.78912345 
3.14... 1.41...

Exemplul 2

Intrare

10
3.14... 1.41... 10000.1 -3.8(7) 1224.5 -12 324.432 3.27 1.41 6.78912345

Ieșire

Multime vida
-12
10000.1 -3.8(7) 1224.5 -12 324.432 3.27 1.41 6.78912345
3.14... 1.41...
#include <bits/stdc++.h>
using namespace std;

int n;
char m[101][101];

bool N(char s[])
{
    int i = 0;
    while(s[i])
    {
        if(s[i] == '.')
            return false;
        if(s[i] == '-')
            return false;
        i++;
    }
    return true;
}

bool Z(char s[])
{
    int i = 0;
    while(s[i])
    {
        if(s[i] == '.')
            return false;
        i++;
    }
    return true;
}

bool Q(char s[])
{
    int i = 0;
    while(s[i])
    {
        if(i > 1 && (s[i] == '.' && s[i-1] == '.'))
            return false;
        i++;
    }
    return true;
}

bool R(char s[])
{
    int i = 0;
    while(s[i])
    {
        if(i > 1 && s[i] == '.' && s[i-1] == '.')
            return true;
        i++;
    }
    return false;
}

int main(){
    cin >> n;
    for(int i = 1; i <= n; ++i)
        cin >> m[i];
    bool ok = false;
    for(int i = 1; i <= n; ++i)
        if(N(m[i]))
            ok = true, cout << m[i] << ' ';
    if(!ok)
        cout << "Multime vida";
    cout << "\n";
    ok = false;
    for(int i = 1; i <= n; ++i)
        if(Z(m[i]))
            ok = true, cout << m[i] << ' ';
    if(!ok)
        cout << "Multime vida";
    cout << "\n";
    ok = false;
    for(int i = 1; i <= n; ++i)
        if(Q(m[i]))
            ok = true, cout << m[i] << ' ';
    if(!ok)
        cout << "Multime vida";
    cout << "\n";
    ok = false;
    for(int i = 1; i <= n; ++i)
        if(R(m[i]))
            ok = true, cout << m[i] << ' ';
    if(!ok)
        cout << "Multime vida";
    return 0;
}
Comentarii

S-ar putea sa iti placa