Informatică, întrebare adresată de Ionut945, 8 ani în urmă

Problema de pe pbinfo 1045:
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.

Anexe:

lucaciucandrei: cu placere! coroana te rog!

Răspunsuri la întrebare

Răspuns de lucaciucandrei
4

#include <fstream>

using namespace std;

int x[10] = {12, 5, 11, 11, 9, 11, 12, 7, 13, 12};

int main() {

ifstream cin("imprimanta.in");

ofstream cout("imprimanta.out");

unsigned long long a;

int k, maxcif = -1, minap = 14, nrmaxcif, pramas;

cin >> a >> k;

cin.close();

while (a) {

if (x[a % 10] < minap) {

maxcif = a % 10;

minap = x[a % 10];

}

else

if (x[a % 10] == minap)

if (a % 10 > maxcif)

maxcif = a % 10;

a /= 10;

}

cout << maxcif << '\n';

nrmaxcif = k / 5;

pramas = k % 5;

if (pramas == 0) {

for (int i = 1; i <= nrmaxcif; i++) cout << 1;

return 0;

}

else

if (pramas == 1) {

if (k == 16) {

cout << 74;

return 0;

}

else {

cout << 777;

for (int i = 1; i <= nrmaxcif - 4; i++) cout << 1;

return 0;

}

}

else

if (pramas == 2) {

cout << 7;

for (int i = 1; i <= nrmaxcif - 1; i++) cout << 1;

return 0;

}

else

if (pramas == 3) {

cout << 8;

for (int i = 1; i <= nrmaxcif - 2; i++) cout << 1;

return 0;

}

else {

cout << 77;

for (int i = 1; i <= nrmaxcif - 2; i++) cout << 1;

return 0;

}

}


Ionut945: când o sa apara varianta o sa dau coroana 100%
lucaciucandrei: ok sper
Ionut945: încă nu mia apărut opțiunea sa iti dau coroană.....oare dureaza atât de mult sa apara pentru ca tu ai dat singurul răspuns????Oricum mai verific și mâine dimineata și dacă apare opțiunea o sa iti dau coroana...
lucaciucandrei: sincer nu stiu!posibil sa nu poti sa dai coroana ca nu ai un anumit grad... scrie in regulament sigur
Ionut945: coroana pot sa dau deoarece mi-ai mai rezolvat o problema și la aia ti-am putut da după un anumit timp..
lucaciucandrei: am inteles
Ionut945: gata acum mi-a apărut și ti-am dat..aparent trebuia sa aștept o zi
lucaciucandrei: ms de coroana! daca poti sa dai si la altele ar fi perfect
Ionut945: pai s-ar putea sa mai pun o problema azi, oare mi-ai putea-o rezolva??
lucaciucandrei: cred
Alte întrebări interesante