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
.
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!