Se consideră o propoziţie formată din litere mici ale alfabetului englez şi eventual spaţii. Cuvintele sunt formate numai din litere şi sunt separate între ele prin unul sau mai multe spaţii.
Definim numărul asociat unui cuvânt c
1
c
2
...c
k
ca fiind un număr natural nc
, obţinut ca produsul puterilor de forma p
i
, unde p
este poziţia în alfabet a literei c
i
. Astfel cuvântului badab
i se asociază numărul nc=2
1
∙1
2
∙4
3
∙1
4
∙2
5
, adică nc=4096
.
Definim gradul unui cuvânt c
1
c
2
...c
k
ca fiind numărul nr modulo k
, unde nr
este numărul de divizori al lui nc
. Gradul cuvântului badab
este 3
, pentru că nr=13
(cei 13
divizori ai lui 4096
sunt: 1
, 2
, 4
, 8
, 16
, 32
, 64
, 128
, 256
, 512
, 1024
, 2048
şi 4096
), k=5
(cuvântul conţine 5
litere) şi 13 modulo 5=3
.
Definim gradul unei propoziţii ca fiind suma gradelor cuvintelor existente în ea.
Cerința
Să se scrie un program care pentru o propoziţie dată determină gradul ei.
Date de intrare
Fişierul de intrare grad.in
va conţine pe prima linie o propoziţie.
Date de ieșire
Fişierul de ieşire grad.out
va conţine pe prima linie gradul propoziţiei.
Restricții și precizări
- Propoziţia are cel mult
255
de caractere. - Propoziţia începe şi se termină cu literă, şi este urmată de sfârşit de linie.
n modulo k
înseamnă restul împărţirii luin
lak
.- În alfabet litera
a
este pe poziţia1
,b
este pe poziţia2
, şi aşa mai departe.
Exemplu
grad.in
de badab
grad.out
4
Explicație
Gradul cuvântului de
este 1
, iar gradul cuvântului badab
este 3
, deci gradul propoziţiei citite va fi 1+3=4
.
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 grad:
#include <cstdio>
#include <cstring>
using namespace std;
char S[300];
int sum, prod, L, aux, pa, d, k, e, i, j, C;
int P[30];
int main() {
FILE *f = fopen("grad.in","r");
fgets(S, 300, f);
fclose(f);
S[strlen(S)+1] = 0;
S[strlen(S)] = ' ';
L = strlen(S);
for (i=0;S[i] == ' ';i++);
k = 1;
C = S[i];
pa = S[i] - 'a' + 1;
aux = pa;
d = 2;
while (aux!=1) {
e = 0;
while (aux % d ==0) {
e++;
aux/=d;
}
if (e) {
P[d] += (e*k);
}
d++;
}
for (i++;i<L;i++) {
if (S[i] >= 'a' && S[i]<='z') {
k++;
pa = S[i] - 'a' + 1;
aux = pa;
d = 2;
while (aux!=1) {
e = 0;
while (aux % d ==0) {
e++;
aux/=d;
}
if (e) {
P[d] += (e*k);
}
d++;
}
} else
if ((S[i] < 'a' || S[i]>'z') && S[i-1]>='a' && S[i-1]<='z') {
int prod = 1;
for (j=2;j<=23;j++) {
prod = prod * (P[j]+1);
P[j] = 0;
prod %= k;
}
sum += prod;
k = 0;
} else
k=0;
}
// printf("%s",S);
FILE *g = fopen("grad.out","w");
fprintf(g,"%d",sum);
fclose(g);
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 #686 grad
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #686 grad 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!