Răspuns :
#include <iostream>
using namespace std;
int main() {
int n, nr = 0;
cin >> n;
for(int i = 0; i < n; i++) {
int val;
cin >> val;
val = val / 10; // am taiat ultima cifra
while(val > 9 && val % 10 == val % 100 / 10) // cat timp numarul are macar 2 cifre si ultima cifra este egala cu penultima, se taie ultima cifra
val /= 10;
if(val <= 99) // daca nr mai are 2 cifre : o cifra (din cele egale) si prima cifra, respecta conditia
nr++;
}
cout << nr;
return 0;
}
using namespace std;
int main() {
int n, nr = 0;
cin >> n;
for(int i = 0; i < n; i++) {
int val;
cin >> val;
val = val / 10; // am taiat ultima cifra
while(val > 9 && val % 10 == val % 100 / 10) // cat timp numarul are macar 2 cifre si ultima cifra este egala cu penultima, se taie ultima cifra
val /= 10;
if(val <= 99) // daca nr mai are 2 cifre : o cifra (din cele egale) si prima cifra, respecta conditia
nr++;
}
cout << nr;
return 0;
}
Ne dam seama din enunt ca avem cateva cazuri limita si depinde cum le tratam.
In primul rand, numerele de o cifra si 2 cifre nu le numaram, pentru ca daca am scoate prima si ultima cifra nu am mai ramane cu nimic
Acum vin numerele de 3 cifre. Daca scoatem prima si a treia cifra, atunci ramane cu o singura cifra care este egala cu ea insasi. Deci o putem numara intotdeauna.
De la 4 cifre in sus avem acelasi caz. Eliminam prima si ultima cifra
deci avem un numar de forma abbbc care il putem numara
mai intai ultima cifra nu ne intereseaza deci putem imparti numarul la 10 si obtinem abbbc/10=abbb
Acum prima cifra pe care o luam ar trebui sa fie egala cu toate cele care vor veni, deci o putem numi cifra de referinta adica cifra_ref
Aici folosim functia rest pentru a extrage exact valoarea cifrei
cifra_ref=abbb%10=b
si mai scoatem o cifra abbb/10=abb
Cifra actuala a lui o notam cifra_actuala
Atunci avem: cifra_actuala=abb%10=b
Comparam cifra_actuala cu cifra de referinta: daca sunt egale, continuam cautarea, daca nu, ne oprim, nu mai are rost sa cautam pentru ca deja stim ca nu este un numar central
Daca sunt egale continuam pana ajungem cu impartirea la o singura cifra, adica numarul trebuie sa fie mereu mai mare decat 10
Ai codul ceva mai jos
#include <iostream>
#include <fstream>
using namespace std;
int main(){
//declarare fisiere citire
ifstream fic("centrale.in");
ofstream foc("centrale.out");
//copie_val este folosit pentru a memora valoarea numarului este folosit strict pentru testare
int a[100],copie_val,i,n,cifra_actuala,cifra_ref,cifre_egale,numarator=0;
//nr de elemetne
fic>>n;
for(i=0;i<n;i++){
//citire numar
fic>>a[i];
//salvam valoarea numarului
copie_val=a[i];
//scoatem ultima cifra
a[i]=a[i]/10;
//aflam cifra de referinta
cifra_ref=a[i]%10;
//cea actuala este chiar cea de referinta
cifra_actuala=cifra_ref;
//daca am ramas cel putin cu 2 cifre, mai mare decat 10
if(a[i]>=10){
//pornim cu faptul ca cifra actuala este egala cu cea de referinta
cifre_egale=1;
//cat timp este mai mare ca 10, adica nu ajungem la prima cifra
//si cifrele sunt egale
while(a[i]>=10&&cifre_egale==1){
//scoate urmataorea cifra
cifra_actuala=a[i]%10;
//daca nu sunt egale, marcheaza asta pentru a opri cautarea
if(cifra_actuala!=cifra_ref){
cifre_egale=0;
}
//altfel treci la urmatoarea cifra
else{
a[i]=a[i]/10;
}
}
//daca cifrele au fost intotdeauna cu valoarea de referinta, incrementeaza numarator
if(cifre_egale==1){
//foc<<copie_val<<" ";
numarator++;
}
}
}
foc<<numarator;
return 0;
}
In primul rand, numerele de o cifra si 2 cifre nu le numaram, pentru ca daca am scoate prima si ultima cifra nu am mai ramane cu nimic
Acum vin numerele de 3 cifre. Daca scoatem prima si a treia cifra, atunci ramane cu o singura cifra care este egala cu ea insasi. Deci o putem numara intotdeauna.
De la 4 cifre in sus avem acelasi caz. Eliminam prima si ultima cifra
deci avem un numar de forma abbbc care il putem numara
mai intai ultima cifra nu ne intereseaza deci putem imparti numarul la 10 si obtinem abbbc/10=abbb
Acum prima cifra pe care o luam ar trebui sa fie egala cu toate cele care vor veni, deci o putem numi cifra de referinta adica cifra_ref
Aici folosim functia rest pentru a extrage exact valoarea cifrei
cifra_ref=abbb%10=b
si mai scoatem o cifra abbb/10=abb
Cifra actuala a lui o notam cifra_actuala
Atunci avem: cifra_actuala=abb%10=b
Comparam cifra_actuala cu cifra de referinta: daca sunt egale, continuam cautarea, daca nu, ne oprim, nu mai are rost sa cautam pentru ca deja stim ca nu este un numar central
Daca sunt egale continuam pana ajungem cu impartirea la o singura cifra, adica numarul trebuie sa fie mereu mai mare decat 10
Ai codul ceva mai jos
#include <iostream>
#include <fstream>
using namespace std;
int main(){
//declarare fisiere citire
ifstream fic("centrale.in");
ofstream foc("centrale.out");
//copie_val este folosit pentru a memora valoarea numarului este folosit strict pentru testare
int a[100],copie_val,i,n,cifra_actuala,cifra_ref,cifre_egale,numarator=0;
//nr de elemetne
fic>>n;
for(i=0;i<n;i++){
//citire numar
fic>>a[i];
//salvam valoarea numarului
copie_val=a[i];
//scoatem ultima cifra
a[i]=a[i]/10;
//aflam cifra de referinta
cifra_ref=a[i]%10;
//cea actuala este chiar cea de referinta
cifra_actuala=cifra_ref;
//daca am ramas cel putin cu 2 cifre, mai mare decat 10
if(a[i]>=10){
//pornim cu faptul ca cifra actuala este egala cu cea de referinta
cifre_egale=1;
//cat timp este mai mare ca 10, adica nu ajungem la prima cifra
//si cifrele sunt egale
while(a[i]>=10&&cifre_egale==1){
//scoate urmataorea cifra
cifra_actuala=a[i]%10;
//daca nu sunt egale, marcheaza asta pentru a opri cautarea
if(cifra_actuala!=cifra_ref){
cifre_egale=0;
}
//altfel treci la urmatoarea cifra
else{
a[i]=a[i]/10;
}
}
//daca cifrele au fost intotdeauna cu valoarea de referinta, incrementeaza numarator
if(cifre_egale==1){
//foc<<copie_val<<" ";
numarator++;
}
}
}
foc<<numarator;
return 0;
}
Vă mulțumim că ați ales să vizitați platforma noastră dedicată Informatică. Ne bucurăm dacă informațiile oferite v-au fost de ajutor. Pentru orice întrebare sau clarificare suplimentară, echipa noastră vă stă la dispoziție. Revenirea dumneavoastră ne onorează – nu uitați să ne salvați în lista de favorite!