Matura 2014 – Ciekawe napisy
TREŚĆ ZADANIA
ROZWIĄZANIE
[sociallocker id=”128″]
#include <iostream>
#include <fstream>
#include <map>
using namespace std;
//podpunkt A
bool napis_pierwszy(string s)
{
int suma=0;
for (int i=0; i<s.size(); i++)
suma+=s[i];
for (int i=2; i<=suma/2; i++)
if (suma%i==0)
return false;
return true;
}
//podpunkt B
bool napis_rosnacy(string s)
{
for (int i=0; i<s.size()-1; i++)
if (s[i]>=s[i+1])
return false;
return true;
}
int main() {
fstream in("plik.txt");
string s;
map <string,int> mapa;
while(!in.eof())
{
in >> s;
mapa[s]++;
}
//pktA
int ile=0;
for (auto i=mapa.begin(); i!=mapa.end(); i++)
{
if (napis_pierwszy(i->first))
ile += i->second;
}
cout << ile << "\n\n";
//pktB
for (auto i=mapa.begin(); i!= mapa.end(); i++)
{
if (napis_rosnacy(i->first))
for (int j=1; j<= i->second; j++)
cout << i->first << endl;
}
//pktC
cout << "\n";
for (auto i=mapa.begin(); i!=mapa.end(); i++)
{
if (i->second > 1)
cout << i->first << endl;
}
return 0;
}
ANALIZA ROZWIĄZANIA
Wczytuje wszystkie napisy z pliku txt do mapy i zlicza ile razy występował dany napis.
fstream in("plik.txt");
string s;
map <string,int> mapa;
while(!in.eof())
{
in >> s;
mapa[s]++;
}
Podpunkt A
W instrukcji warunkowej następuje zliczanie napisów pierwszych.
int ile=0;
for (auto i=mapa.begin(); i!=mapa.end(); i++)
{
if (napis_pierwszy(i->first))
ile += i->second;
}
cout << ile;
Funkcja sprawdza czy napis jest napisałem pierwszym. Zwraca true lub false.
bool napis_pierwszy(string s)
{
int suma=0;
for (int i=0; i<s.size(); i++)
suma+=s[i];
for (int i=2; i<=suma/2; i++)
if (suma%i==0)
return false;
return true;
}
Podpunkt B
Pętla for wyświetla wszystkie napisy rosnące wraz z powtórzeniami.
for (auto i=mapa.begin(); i!= mapa.end(); i++)
{
if (napis_rosnacy(i->first))
for (int j=1; j<= i->second; j++)
cout << i->first << endl;
}
Funkcja sprawdza czy napis jest rosnący. Zwraca true lub false.
bool napis_rosnacy(string s)
{
for (int i=0; i<s.size()-1; i++)
if (s[i]>=s[i+1])
return false;
return true;
}
Podpunkt C
Pętla for wyświetla wszystkie napisy, które występują w mapie więcej niż jeden raz.
for (auto i=mapa.begin(); i!=mapa.end(); i++)
{
if (i->second > 1)
cout << i->first << endl;
}
KLUCZ ODPOWIEDZI
Arkusz, klucz odpowiedzi, plik z danymi znajdziesz na naszej grupie.
[/sociallocker]
Pages: 1 2