Un indicator numeric este un dispozitiv de afişaj electronic destinat afişării unei cifre zecimale.
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 ≤ 10
19
- 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
.
#include <bits/stdc++.h> using namespace std; int c[]={6, 2, 5, 5, 4, 5, 6, 3, 7, 6 }; int t[]={2, 7, 2, 3, 3, 4, 2, 5, 1, 2}; int mm[]={1, 5, 1, 2, 2, 3, 1, 2, 0, 0 }; int cif[25]; char s[25]; unsigned long long p,sol; ifstream fin ("cifre12.in"); ofstream fout ("cifre12.out"); int main() { int t1,k=0,sum=0,g; fin >> t1; fin >> s; for (k=0;s[k];++k) cif[k]=s[k]-'0'; if(t1==1) { for (int i=0;i<k;++i) sum +=c[cif[i]]; fout << sum; } else { for (int i=0;i<k;++i) { p=1; for (int j=i+1;j<k;j++) { g=cif[j]; p=p*t[g]; } sol +=mm[cif[i]] *p; } fout << sol; } return 0; }