fbpx

Problema #2813 – Note – Rezolvari PBInfo

de Mihai-Alexandru

Cerința

Se consideră un text cu cel mult 100 de caractere, în care cuvintele sunt formate din litere mari ale alfabetului englez și sunt separate prin câte un spațiu.

Scrieți un program care citește de la tastatură un text de tipul menționat mai sus și afișează pe ecran, pe câte un rând, cuvintele care cuprind cel puțin o notă muzicală. Dacă nu există astfel de cuvinte, se afișează pe ecran mesajul nu exista.

Date de intrare

Programul citește de la tastatură un text de tipul menționat.

Date de ieșire

Programul va afișa pe ecran, pe câte un rând, cuvintele care cuprind cel puțin o notă muzicală. Dacă nu există astfel de cuvinte, se afișează pe ecran mesajul nu exista.

Restricții și precizări

  • cuvintele vor fi afișate în ordinea din text
  • notele muzicale sunt DO, RE, MI, FA, SOL, LA, SI.

Exemplu

Intrare

REMI DOMINO SI KHANHOO SUNT DENUMIRI DE JOCURI CE AU ASPECTE SIMILARE

Ieșire

REMI
DOMINO
SI
DENUMIRI
SIMILARE
#include <bits/stdc++.h>
using namespace std;

char s[101] , m[101][101];

bool DO(char a , char b)
{
    if(a=='D' && b=='O')
        return 1;
    return 0;
}

bool RE(char a , char b)
{
    if(a=='R' && b=='E')
        return 1;
    return 0;
}

bool MI(char a , char b)
{
    if(a=='M' && b=='I')
        return 1;
    return 0;
}

bool FA(char a , char b)
{
    if(a=='F' && b=='A')
        return 1;
    return 0;
}

bool SOL(char a , char b)
{
    if(a=='S' && b=='O')
        return 1;
    return 0;
}

bool LA(char a , char b)
{
    if(a=='L' && b=='A')
        return 1;
    return 0;
}

bool SI(char a , char b)
{
    if(a=='S' && b=='I')
        return 1;
    return 0;
}

bool oke(int i)
{
    int j = 1;
    while(m[i][j]!='\0')
    {
        if(RE(m[i][j-1] , m[i][j]))
            return 1;
        if(DO(m[i][j-1] , m[i][j]))
            return 1;
        if(MI(m[i][j-1] , m[i][j]))
            return 1;
        if(FA(m[i][j-1] , m[i][j]))
            return 1;
        if(SOL(m[i][j-1] , m[i][j]) && m[i][j+1] == 'L')
            return 1;
        if(LA(m[i][j-1] , m[i][j]))
            return 1;
        if(SI(m[i][j-1] , m[i][j]))
            return 1;
        j++;
    }
}

int main()
{
    cin.getline(s , 101);
    bool ok = true;
    int cnt = 1 , j = 0;
    int i = 0;
    while(s[i]!='\0')
    {
        if(s[i]==' ' && s[i-1]!=' ')
        {
            cnt++;
            j=0;
        }
        else
            m[cnt][j]=s[i] , j++;
        i++;
    }
    int r = 0;
    for(int i = 1 ; i <= cnt ; ++i)
    {
        if(oke(i))
            cout << m[i] << endl , r++;
    }
    if(!r)
        cout << "nu exista";
    return 0;
}
Comentarii

S-ar putea sa iti placa