Rezolvare completă PbInfo #2298 magnitudine

Cerința

În această problemă veţi primi două numere natural N, şi K. Definim magnitudinea unui număr ca fiind diferenţa dintre cifra maximă şi cifra minimă ale lui. De exemplu, magnitudinea lui 9748 este 94 = 5.

Eliminaţi maxim K cifre din numărul N, astfel încât magnitudinea numărului obţinut să fie cât mai mică.

Date de intrare

În fișierul magnitudine.in se află pe prima linie numerele N si K separate prin spaţii.

Date de ieșire

Afișați în fișierul magnitudine.out magnitudinea minimă care se poate obţine după eliminarea a K cifre ale lui N.

Restricții și precizări

  • 1 ≤ N ≤ 1018
  • pentru teste în valoare de 30 puncte, K = 0
  • pentru teste în valoare de 30 puncte, K = 1
  • pentru teste în valoare de 40 puncte, K = 2

Exemplu 1:

magnitudine.in

9748 1

magnitudine.out

2

Explicație

Daca eliminam cifra 4 obtinem 978 cu magnitudine = 2.

Exemplu 2:

magnitudine.in

90021 1

magnitudine.out

2

Explicație

Daca eliminam cifra 9 obtinem 0021 cu magnitudine = 2.

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 magnitudine:

#include <stdio.h>

long long N, K;
long long cif[20], l;

int main() {
    freopen("magnitudine.in", "rt", stdin);
    freopen("magnitudine.out", "wt", stdout);

    scanf("%lld %lld", &N, &K);

    while (N) {
        cif[l++] = N % 10;
        N /= 10;
    }

    int rez = 9;
    for (int elimin1 = 0; elimin1 < l; elimin1++) {
        for (int elimin2 = 0; elimin2 < l; elimin2++) {
            
            int min = 9, max = 0;
            for (int i = 0; i < l; i++) {
                if (K == 0 || // nu evit nimic
                    (K == 1 && i != elimin1) || // evit orice pozitie
                    (K == 2 && i != elimin1 && i != elimin2)) { // evit orice doua pozitii
                    
                    if (min > cif[i]) {
                        min = cif[i];
                    }
                    if (max < cif[i]) {
                        max = cif[i];
                    }
                }
            }
            if (rez > max - min) {
                rez = max - min;
            }
        }
    }
    printf("%lld\n", rez);  

    fclose(stdout);
    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 Adresa de email.

Rezolvarea problemei #2298 magnitudine

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2298 magnitudine 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!