Un indicator numeric este un dispozitiv de afişaj electronic destinat afişării unei cifre zecimale.
Acesta conține 7 segmente notate cu a, b, c, d, e, f, g, ca în figura de mai jos.

Afişarea unei cifre se face prin aprinderea unei combinații de segmente conform tabelului:
| Cifră | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|---|---|---|---|---|---|---|---|---|---|
| Segmente aprinse | a,b,c,d,e,f | b,c | a,b,d,e,g | a,b,c,d,g | b,c,f,g | a,c,d,f,g | a,c,d,e,f,g | a,b,c | a,b,c,d,e,f,g | a,b,c,d,f,g |
Cerința
Cunoscând un număr natural N afișat cu ajutorul mai multor indicatoare numerice, să se scrie un program care determină:
- Numărul de segmente aprinse pentru afișarea numărului
N. - Numărul de numere distincte mai mari decât
N,ce se pot forma prin aprinderea a cel puțin unui segment în plus, față de cele utilizate pentru afișarea număruluiN, fără a folosi alte indicatoare numerice, și fără a stinge niciun segment dintre cele deja aprinse.
Date de intrare
Fișierul de intrare cifre12.in conține pe prima linie numărul natural V a cărui valoare poate fi doar 1 sau 2, iar pe a doua linie numărul natural N.
Date de ieșire
Fișierul de ieșire este cifre12.out.
Dacă valoarea lui V este 1 atunci fişierul de ieşire va conţine pe prima linie un singur număr natural ce reprezintă numărul de segmente aprinse pentru afișarea numărului N.
Dacă valoarea lui V este 2 atunci fişierul de ieşire va conține pe prima linie un singur număr natural reprezentând numărul de numere distincte mai mari decât N, ce se pot forma prin aprinderea a cel puțin unui segment în plus, față de cele utilizate pentru afișarea numărului N, fără a folosi alte indicatoare numerice.
Restricții și precizări
10 ≤ N ≤ 1019- 20% din teste vor avea valoarea
V = 1, iar 80% din teste vor avea valoareaV = 2.
Exemplul 1
cifre12.in
1 823
cifre12.out
17
Explicație
V = 1, deci se rezolvă NUMAI prima cerință. N = 823;
Pentru afișarea cifrei 8 s-au aprins 7 segmente, pentru cifra 2 s-au aprins 5 segmente și pentru cifra 3 tot 5 segmente. În total s-au aprins 17 segmente.
Exemplul 2
cifre12.in
2 823
cifre12.out
5
Explicație
V = 2, deci se rezolvă NUMAI a doua cerință. N = 823;
Din cifra 8 nu se mai pot obține alte cifre prin aprinderea de noi segmente.
Din cifra 2 se poate obține cifra 8 iar din cifra 3 se pot obține cifrele 8 și 9 prin aprinderea de noi segmente. Așadar, se pot obține 5 numere mai mari ca 823: 828, 829, 883, 888, 889.
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 Cifre12:
// Chesca Ciprian - sursa 100 p
// O((nrcifre(N)^2))
#include <fstream>
using namespace std;
int main()
{
unsigned long long n,N,S,P;
// cate segmente are fiecare cifra
int s[10]={6,2,5,5,4,5,6,3,7,6};
// cate cifre strict mai mari se pot obtine din cifra curenta prin adaugare
int a[10]={1,5,1,2,2,3,1,2,0,0};
// cate cifre se pot obtine din cifra curenta prin adaugare, inclusiv cifra curenta
int b[10]={2,7,2,3,3,4,2,5,1,2};
int c,k,i,j,w[25],aux,v;
ifstream f("cifre12.in");
ofstream g("cifre12.out");
f>>v>>n;
if (v==1)
{
N=n;S=0;
while (N>0)
{
c=N%10;
S=S+s[c];
N=N/10;
}
g<<S<<"
";
}
if (v==2)
{
// duc cifrele intr-un vector
N=n;k=0;
while (N>0)
{
w[++k]=N%10;
N=N/10;
}
// reversez vectorul
for(i=1,j=k;i<j;i++,j--)
{
aux=w[i];
w[i]=w[j];
w[j]=aux;
}
S=0;
for(i=1;i<=k;i++)
{
if (a[w[i]])
{
P=a[w[i]];
for(j=i+1;j<=k;j++)
P=P*b[w[j]];
S=S+P;
}
}
g<<S<<"
";
}
f.close();
g.close();
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 #1618 Cifre12
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1618 Cifre12 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!