1045 - Imprimanta: Difference between revisions

From Bitnami MediaWiki
Pop Giulia (talk | contribs)
Pagină nouă: ==Enunt== 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...
 
Pop Giulia (talk | contribs)
Line 48: Line 48:
5* (5 puncte pentru cifra 1) = 25 puncte.
5* (5 puncte pentru cifra 1) = 25 puncte.
==Solutie==
==Solutie==
<syntaxhighlight lang="python" line>
def count_points(n, digits):
def count_points(n, digits):
     points = 0
     points = 0
Line 63: Line 64:
             break
             break
     return min_digit
     return min_digit
</syntaxhighlight>

Revision as of 10:41, 30 April 2023

Enunt

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 ≤ 1015 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.

Solutie

<syntaxhighlight lang="python" line> def count_points(n, digits):

   points = 0
   for d in str(n):
       points += digits[d]
   return points

def find_min_digit(digits):

   min_digit = 9
   min_ace = float('inf')
   for i in range(9, -1, -1):
       if digits[i] <= min_ace:
           min_ace = digits[i]
           min_digit = i
       if digits[i] > min_ace:
           break
   return min_digit

</syntaxhighlight>