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

O rezolvare in c++ daca se poate:

Anexe:

andrei750238: Pe viitor te-as ruga sa scrii prima parte din cerinta in intrebare, chiar daca pui imagine. Asa ii poti ajuta si pe altii care au aceasi intrebare si cauta intrebarea pe internet. Multumesc !
teodortoderitap37w4j: nu stiam. de acum asa am sa fac. mersi

Răspunsuri la întrebare

Răspuns de Ohhh1EldenRing
2

#include <iostream>

#include <vector>

#include <algorithm>

using namespace std;

int main() {

vector<string> lista;

int n, m;

cout << "nr de aparitii: "; cin >> m;

cout << "nr de cuvinte: "; cin >> n;

if (m == 0 || m >= n || n > 50) { throw invalid_argument(""); }

string temp;

for (int i = 0; i < n; i++) {

 cin >> temp;

 if (temp.length() > 20) { throw invalid_argument("cuvant prea lung"); }

 lista.push_back(temp);

}

//transform in litere mici

for (int i = 0; i < lista.size(); i++){

 transform(lista[i].begin(), lista[i].end(), lista[i].begin(), tolower);

}

//

auto it = lista.begin();

auto it2 = it;

int count = 0;

while (it != lista.end()) {

 count = 0;

 for (it2; it2 != lista.end(); it2++) {

  if (*it == *it2) {

   count++;

  }

 }

 if (count == m) { cout << *it << endl; }

 it++;

 it2 = it;

}

}


teodortoderitap37w4j: am sa ma uit cand ajung acasa
teodortoderitap37w4j: daca ai timp, ma poti ajuta si cu cealalta intrebare pusa?
teodortoderitap37w4j: eroare la linia"transform(lista[i].begin(), lista[i].end(), lista[i].begin(), tolower);"
Răspuns de andrei750238
3

► PERSPECTIVA STL RECOMANDATA

In standard template library avem diverite structuri de date care ne ajuta sa lucram eficient fara sa implementam totul de la 0.

string = clasa folosita pentru memorarea sirurilor de caractere. Inlocuieste practic sirurile de caractere din C si adauga multe functii care faciliteaza lucrul ce acestea.

unordered_map = container ce memoreaza elemente de tip (cheie, valoare). Fiecarei valori ii corespunde o valoarea. Te poti gandi la aceasta ca la un vector, dar in loc de indice care trebuie sa fie un numar natural intr-un range finit, cheia poate fi orice (numar real, obiecte complexe, in cazul nostru cheia este un string). Foloseste in spate functii hash pentru a asigura o complexitate apropiata de O(1) pentru acces la date.

list = lista de elemente, fiecare element e legat de vecini prin pointeri. Foarte util pentru acces secvential la date. Fata de vector inserarea si stergerea se pot realiza in O(1) in loc de O(n) si nu e necesar sa cunoastem dinainte numarul de elemente.

Rezolvare :

#include <iostream>

#include <string>

#include <list>

#include <unordered_map>

using namespace std;

int main() {

   int n, m;

   string tmp;

   unordered_map<string, int> aparitii;

   list<string> cuvinte_de_afisat;

   cin >> m >> n;

   for (int i = 0; i < n; i++) {

       cin >> tmp;

       ++aparitii[tmp];

       if (aparitii[tmp] == m + 1) cuvinte_de_afisat.push_back(tmp);

   }

   for (auto& element : cuvinte_de_afisat ) {

       cout << element << endl;

   }

}

► PERSPECTIVA STIL C, SCOLARESTE, NERECOMANDAT

Daca te simti intimidat de STL si doresti o rezolvare "ca la liceu" ai mai jos codul.  

#define _CRT_SECURE_NO_WARNINGS

#include <iostream>

#include <cstring>

using namespace std;

int main() {

   int n, m;

   char cuvinte[21][50];

   //Citire date

   cin >> m >> n;

   for (int i = 0; i < n; i++) {

       cin >> cuvinte[i];

   }

   for (int i = 0; i < n; i++) {

       //Sari peste cuvinte sterse

       if (strlen(cuvinte[i]) == 0) continue;

       int aparitii = 1;

       for (int j = i + 1; j < n; j++) {

           //Daca cuvantul e regasit mai tarziu in vector sterge-l si mareste nr aparitii

           if (strcmp(cuvinte[i], cuvinte[j]) == 0) {

               aparitii++;

               strcpy(cuvinte[j], "");

           }

       }

       //Afiseaza daca e cazul

       if (aparitii >= m) cout << cuvinte[i] << endl;

   }

}

► CERINTA

Se da un numar natural n si o lista de n cuvinte, reprezentand o lista de task-uri. Sa se afiseze cuvintele care apar de mai mult de m ori in lista.


teodortoderitap37w4j: Eroare la linia " list cuvinte_de_afisat;". Solutia este sa folosesti si libraria #include
teodortoderitap37w4j: #include
teodortoderitap37w4j: bits/stdc++.h
teodortoderitap37w4j: nu stiu de ce nu a vrut impreuna)
serban1337: sau #include
serban1337: list
Alte întrebări interesante