2441 de pe pbinfo
Cerința
O pereche de cuvinte, unul cu număr par de litere, iar celălalt cu număr impar de litere, se numește descentrată dacă se poate obține cuvântul cu număr par de litere din celălalt, prin duplicarea caracterului din mijlocul acestuia.
Exemplu:
perechile crezi și creezi, respectiv a și aa sunt descentrate.
Date de intrare
Programul citește de la tastatură un text.
Date de ieșire
Programul va afișa pe ecran mesajul DA, dacă acesta conține cel puțin o pereche descentrată, sau mesajul NU în caz contrar.
Restricții și precizări
textul are cel mult 100 de caractere
cuvintele sunt formate din litere mici ale alfabetului englez
cuvintele sunt separate prin câte un spațiu
Exemplu
Intrare
crezi ca poti sa creezi ceva original
Ieșire
DA
Explicație
Perechea descentrată de cuvinte este crezi – creezi.
Răspunsuri la întrebare
Răspuns:
#include <iostream>
#include <string.h>
using namespace std;
int main() {
char text[101], *p; // textul citit si un pointer pentru strtok
char cuvinte[100][100]; // vector de cuvinte in care pun cuvintele din text
cin.get(text, 100); // citesc sirul de la intrare
int nr_cuvinte = 0; //variabila cu care numar cuvintele
p = strtok(text," ");
int i;
while (p) { // separ in cuvinte
strcpy(cuvinte[nr_cuvinte++], p);
p = strtok(NULL, " ");
}
for (i = 0; i < nr_cuvinte; i++) {
/** iau fiecare cuvant si daca e impar il
* fac par, duplicand caracterul din mijloc,
* dupa care, caut in vectorul de cuvinte sa
* vad daca mai apare
*/
p = cuvinte[i];
if (strlen(p) % 2 == 1) {
char temp[100];
strcpy(temp, p);
temp[strlen(p) / 2 + 1] = temp[strlen(p) / 2];
strcpy(temp + strlen(p) / 2 + 2, p + strlen(p) / 2 + 1);
p = temp;
int j;
for (j = 0; j < nr_cuvinte; j++) {
if (strcmp(cuvinte[j],p) == 0) {
cout << "DA"; // daca mai apare afisez DA si ies din program
return 0;
}
}
}
}
cout << "NU";
return 0;
}
Explicație:
Răspuns:
Explicație:
#include <iostream>
#include <cstring>
using namespace std;
char s[101], cuv[50][10], ss[10]="", t[10], ch, *p;
short n, i, k, j;
int main()
{
cin.getline(s,101);
p=strtok(s," ");
while (p)
{
++k; strcpy(cuv[k],p);
p=strtok(NULL, " ");
}
short gasit=0;
for (i=1; i<=k; ++i)
{
n=strlen(cuv[i]);
if (n%2)
{
for (j=1; j<=k; ++j)
{
if (strlen(cuv[j])==n+1)
{
ch=cuv[i][n/2];
strcpy(ss,cuv[i]);
strcpy(t,ss+n/2);
strcpy(ss+n/2+1,t);
ss[n/2]=ch;
if (strcmp(cuv[i],ss)) gasit=1;
}
if (gasit) break;
}
}
if (gasit) break;
}
if (gasit) cout << "DA";
else cout << "NU";
}