Corina are un text format din mai multe cuvinte separate între ele printr-un spațiu, pentru care trebuie să utilizeze cuvintele aflate pe poziţii consecutive. Se știe că pentru două cuvinte pe care le vom numi x
și y
:
- cuvântul
x=x[0]x[1]...x[n-1]
este prefix al cuvântuluiy=y[0]y[1]...y[m-1]
, dacăx[0]=y[0]
,x[1]= y[1]
,…,x[n-1]=y[n-1]
- cuvântul
x=x[0]x[1]...x[n-1]
este sufix al cuvântuluiy=y[0]y[1]...y[m-1]
, dacă există un indicei
, (0≤ i≤ m-1
), astfel încâtx[0]=y[i]
,x[1]= y[i+1]
,…,x[n-1]= y[m-1]
.
Cerința
Scrieţi un program care determină pentru un text dat, format din mai multe cuvinte separate între ele printr-un spațiu, două cerințe:
- cerința 1: câte perechi de cuvinte, notate
x
șiy
, aflate pe poziții consecutive în text au proprietatea:x
este sufix al luiy
saux
este prefix al luiy
. - cerința 2 : care este perechea de cuvinte, aflate pe poziții consecutive în text, care conține cele mai multe caractere.
Date de intrare
Fișierul de intrare cuvinte6.in
conține pe prima linie un text, format din mai multe cuvinte separate între ele printr-un spațiu și pe a doua linie conține un număr natural t
, care reprezintă cerința (dacă t=1
se va rezolva cerința 1, dacă t=2
se va rezolva cerința 2).
Date de ieșire
Fișierul de ieșire cuvinte6.out
va conține pe prima linie, pentru cerința 1, un număr natural, ce reprezintă numărul de perechi de cuvinte, notate x și y, aflate pe poziții consecutive în text care au proprietatea: x este sufix al lui y sau x este prefix al lui y.
Fișierul de ieșire cuvinte6.out
va conține pe prima linie, pentru cerința 2 două cuvinte, separate printr-un spațiu, ce reprezintă perechea de cuvinte, aflate pe poziții consecutive în text, care conține cele mai multe caractere.
Restricții și precizări
- Textul dat conține cel mult 500 de caractere
- Fiecare cuvânt din text este format numai din litere mici ale alfabetului englez
- Fiecare cuvânt din text conține cel puțin o literă și cel mult 20 de litere
- Pentru cerința 2, dacă textul dat are mai multe perechi de cuvinte, aflate pe poziții consecutive în text, care conțin cele mai multe caractere, se va afișa prima pereche din text, cu această proprietate.
Exemplul 1
cuvinte6.in
calcul calcule are care parcare corecte corectie 1
cuvinte6.out
3
Explicație
Cerința 1:
Textul conține 3
perechi de cuvinte : (calcul,calcule)
, (are,care)
, (care,parcare)
.
Exemplul 2
cuvinte6.in
calcul calcule are care parcare corecte corectie 2
cuvinte6.out
corecte corectie
Explicație
Cerința 2: Perechea de cuvinte corecte corectie
conține 14
caractere și reprezintă perechea cu cele mai multe caractere din text.
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema Cuvinte6:
#include <fstream>
#include<string.h>
using namespace std;
char c[2001],*pc[1001];
int n;
ifstream fin("cuvinte6.in");
ofstream fout("cuvinte6.out");
int prefix(char x[],char y[])
{
int lg1,lg2,i;
lg1=strlen(x);
lg2=strlen(y);
if(lg1>lg2)
return 0;
for(i=0;i<lg1;i++)
if(x[i]!=y[i])return 0;
return 1;
}
int sufix(char x[],char y[])
{
int lg1,lg2,i,j;
lg1=strlen(x);
lg2=strlen(y);
if(lg1>lg2)
return 0;
for(i=lg1-1,j=lg2-1;i>=0;i--,j--)
if(x[i]!=y[j])return 0;
return 1;
}
void cerinta1()
{
int nr,i;
nr=0;
for(i=0;i<n-1;i++)
if(prefix(pc[i],pc[i+1]) || sufix(pc[i],pc[i+1]))
nr++;
fout<<nr<<endl;
}
void cerinta2()
{
char *u,*v;
int lg1,lg2,lgt,lgtm,i;
lg1=strlen(pc[0]);
lg2=strlen(pc[1]);
lgtm=lg1+lg2;
u=pc[0];
v=pc[1];
for(i=1;i<n-1;i++)
{
lg1=lg2;
lg2=strlen(pc[i+1]);
lgt=lg1+lg2;
if(lgt>lgtm)
{
lgtm=lgt;
u=pc[i];
v=pc[i+1];
}
}
fout<<u<<<<v<<endl;
}
int main()
{
char *p;
int t;
fin.getline(c,2001);
fin>>t;
n=0;
p=strtok(c," ");
while(p)
{
pc[n]=p;
n++;
p=strtok(NULL," ");
}
if(t==1)
cerinta1();
else cerinta2();
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #1947 Cuvinte6
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1947 Cuvinte6 de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!