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

Fișierul bac.in conține un șir de cel mult 10^6 numere naturale din intervalul [0,10^9], separate prin câte un spațiu. Se cere să se afișeze pe ecran pozițiile din șir pe care se află termeni precedați de un număr maxim de valori care au cifra unităților egală cu cifra unităților lor. Numerele afișate sunt separate prin câte un spațiu. Proiectați un algoritm eficient din punctul de vedere al timpului de executare.
Exemplu: dacă fișierul bac.in conține numerele 112 12 5 25 88 15 2 19 32 179 35 621 pe ecran se afișează numerele de mai jos (termenii 32, respectiv 35 respectă proprietatea cerută): 9 11

Răspunsuri la întrebare

Răspuns de Utilizator anonim
1

#include <fstream>

using namespace std;

ifstream f_in("bac.in");

ofstream f_out("bac.out");

int main()

{

   unsigned int element;    

   struct soluție {

       unsigned int apariții;

       unsigned int poziție;

   }cifre[10]{ { 0, 0 } };

   unsigned int poziție = 1;

   while (f_in >> element) {

       cifre[element % 10].apariții++;

       cifre[element % 10].poziție = poziție++;

   }

   unsigned int maxim_apariții = 0;

   for (soluție element : cifre)

       if (element.apariții > maxim_apariții)

           maxim_apariții = element.apariții;

   for (soluție element : cifre)

       if (element.apariții == maxim_apariții)

           f_out << element.poziție << ' ';

   return 0;

}

Alte întrebări interesante