Cif-Oji6 este o imprimantă matriceală numită şi imprimantă cu ace, deoarece tipărirea se realizează prin impactul acelor capului de imprimare pe o bandă cu tuş.
Acele sunt aranjate într-o grilă dreptunghiulară formată din 5
rânduri de ace, pe fiecare rând aflându-se la distanţe egale câte 3
ace, aşa cum se observă în figura alăturată.
Prin acţionarea diferitelor combinaţii de ace din grilă, se defineşte forma fiecărei cifre ce permite tipărirea acesteia prin puncte, în felul următor:
De exemplu, cifra 2
va fi tipărită prin 11
puncte ca rezultat al acţionării a 11
ace din grilă: din primul rând de ace al grilei se vor acţiona toate cele 3
ace, din următorul rând doar acul din dreapta, apoi de pe următorul rând toate cele 3
ace, apoi acul din stânga de pe penultimul rând iar din ultimul rând toate cele 3
ace.
Cerințe
a) Ştiind că imprimanta Cif-Oji6 a tipărit numărul N
, determinaţi care este cea mai mare cifră a numărul N
pentru care s-a acţionat un număr minim de ace ale grilei.
b) Ştiind că imprimanta mai are tuş pe bandă doar pentru imprimarea a K
puncte, determinaţi cel mai mare număr natural ce poate fi tipărit prin exact K
puncte.
Date de intrare
Fișierul de intrare imprimanta.in
conține pe prima linie două numere naturale N
şi K
separate printr-un spaţiu, unde N
reprezintă numărul tipărit de imprimantă iar K
numărul de puncte pentru care imprimanta mai are tuş.
Date de ieșire
Fișierul de ieșire imprimanta.out
va conține:
- pe prima linie un singur număr natural ce reprezintă cea mai mare cifră a numărul
N
pentru care s-a acţionat un număr minim de ace ale grilei. - pe cea de-a doua linie a fişierului se va scrie cel mai mare număr natural ce poate fi tipărit prin
K
puncte.
Restricții și precizări
10 ≤ N ≤ 10
15
14 ≤ K ≤ 100000
- Pentru rezolvarea corectă a cerinţei a) se acordă
30%
din punctajul fiecărui test iar pentru rezolvarea corectă a cerinţei b) se acordă70%
din punctajul fiecărui test.
Exemplul 1
imprimanta.in
2852 16
imprimanta.out
5 74
Explicație
Pentru tipărirea cifrei 2
s-au acţionat 11
ace, pentru cifra 8
s-au acţionat 13
ace iar pentru cifra 5
tot 11
ace. Numărul minim de ace pentru tipărirea unei cifre este 11
.
5
este cea mai mare cifră a numărului 2852
ce a fost tipărită cu 11
ace.
Cel mai mare număr natural ce poate fi tipărit prin 16
puncte este 74
7
puncte (pentru cifra 7
) + 9
puncte (pentru cifra 4
) = 16 puncte.
Exemplul 2
imprimanta.in
88 25
imprimanta.out
8 11111
Explicație
Pentru tipărirea cifrei 8
s-au acţionat 13
ace.
Cel mai mare număr natural ce poate fi tipărit prin 25
de puncte este 11111
5* (5 puncte pentru cifra 1) = 25
puncte.
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 Imprimanta:
//Marinel Serban
//O(k)
#include <fstream>
using namespace std;
ifstream fin("imprimanta.in");
ofstream fout("imprimanta.out");
long long N, K, s_max, s;
int cifra, ace, min_ace = 25, max_cifra, i;
int main()
{
fin >> N >> K;
//punctul a)
while (N)
{
cifra = N % 10;
N /= 10;
switch (cifra)
{
case 0:
case 6:
case 9: ace = 12; break;
case 1: ace = 5; break;
case 2:
case 3:
case 5: ace = 11; break;
case 4: ace = 9; break;
case 7: ace = 7; break;
case 8: ace = 13; break;
}
if (ace < min_ace)
{
min_ace = ace;
switch (ace)
{
case 12: max_cifra = cifra; break;
case 11: max_cifra = cifra; break;
case 5: max_cifra = 1; break;
case 7: max_cifra = 7; break;
case 9: max_cifra = 4; break;
case 13: max_cifra = 8; break;
}
}
else
if (ace == min_ace)
switch (ace)
{
case 12: if (cifra>max_cifra) max_cifra = cifra; break;
case 11: if (cifra>max_cifra) max_cifra = cifra; break;
}
}
fout << max_cifra << '\n';
//punctul b)
if (K % 5 == 0)
for (i = 1; i <= K / 5; ++i) fout << 1; //numai 1
else
if (K % 5 == 1)
{
if (K == 16) fout << 74; //caz particular
else
{
fout << 777; //21 ace (3 * 7)
for (i = 1; i <= (K - 21) / 5; ++i) fout << 1;//restul 1 (cate 5 ace)
}
}
else
if (K % 5 == 2)
{
fout << 7; //7 ace (2+5)
for (i = 1; i <= (K - 7) / 5; ++i) fout << 1; //restul 1
}
else
if (K % 5 == 3)
{
fout << 8; //13 ace (3+2*5)
for (i = 1; i <= (K - 13)/ 5; ++i) fout << 1; //restul 1
}
else
{
fout << 77; //9 ace (4+5)
for (i = 1; i <= (K - 14) / 5; ++i) fout << 1;
}
fout << '\n';
fout.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 #1045 Imprimanta
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1045 Imprimanta 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!