HASŁA - na podstawie zadania 74 ze zbioru CKE http://www.cke
Transkrypt
HASŁA - na podstawie zadania 74 ze zbioru CKE http://www.cke
HASŁA - na podstawie zadania 74 ze zbioru CKE http://www.cke.edu.pl/images/_EGZAMIN_MATURALNY_OD_2015/Materialy/Zbiory_zadan/ Matura_Zbi%C3%B3r_zada%C5%84_Informatyka.pdf W pliku hasla.txt danych jest 200 haseł użytkowników pewnego systemu. Każdy użytkownik posiada jedno hasło, każde zapisano w osobnym wierszu, zawierajace od 1 do 20 znaków alfanumerycznych, tzn. cyfr od 0 do 9 lub liter alfabetu łacińskiego (małych lub dużych). Polityka bezpieczeństwa systemu wymaga, aby hasła były odpowiednio skomplikowane. 1. Podaj liczbę haseł złożonych jedynie ze znaków numerycznych, tzn. cyfr od 0 do 9. 2. Podaj liczbę haseł, które spełniają jednocześnie poniższe warunki: • hasło zawiera co najmniej jeden znak numeryczny, tzn. cyfrę od 0 do 9, • hasło zawiera co najmniej jedną małą literę, • hasło zawiera co najmniej jedną dużą literę. 3. Wypisz hasła, które zostały użyte przez co najmniej dwóch różnych użytkowników, tzn. występują przynajmniej w dwóch różnych wierszach. Wypisz je bez powtórzeń, w kolejności leksykograficznej. 4. Podaj liczbę użytkowników posiadających hasła, w których występuje fragment złożony z czterech kolejnych znaków ASCII (w dowolnej kolejności), na przykład: A5mnpoR89cd A5876RRcg As45FGHFEk90nba Poprawne odpowiedzi 1 - 16 haseł numerycznych 2 - 40 haseł zawiera przynajmniej jedną cyfrę oraz małą i dużą literę 3 - 8 haseł występuje w pliku więcej niż jeden raz: 8Y7JGYXXR5 Ehz018657 PAsCMQaervw cefdi cek ikfLDegQXj jir yvm249t83o04 4 - 39 haseł spełnia kryterium zadania 4 Przykładowe rozwiązanie #include <iostream> #include <fstream> using namespace std; int main() { ifstream we("hasla.txt"); const int n = 200; string S[n]; int licz = 0; // zad 1 - hasła numeryczne for (int i=0; i<n; i++) { we >> S[i]; int d = S[i].length(); int j=0; while (j<d) { if ( S[i][j]>='0' && S[i][j]<='9') j++; else break; } if (j==d) licz++; } cout << licz << " haseł numerycznych\n"; licz = 0; // zad 2 - cyfra+mala+duza litera bool cyfra, mala, duza; for (int i=0; i<n; i++) { cyfra = mala = duza = false; for (int j=0; j<S[i].length(); j++) { char c = S[i][j]; if ( c>='0' && c<='9') cyfra = true; if ( c>='A' && c<='Z') duza = true; if ( c>='a' && c<='z') mala = true; } if (cyfra && mala && duza) licz++; } cout << licz << " haseł ma cyfrę, małą i dużą literę\n\n"; cout << "Duplikaty:\n"; sort(S, S+n); for (int i=0; i<n-1; i++) { int j = i+1; while (j<n && S[i]==S[j]) j++; if (j>i+1) { cout << S[i] << endl; i = j-1; } } } // zad 3 - duplikaty cout << "\nSekwencja 4 kolejnych kodów ASCII\n"; licz = 0; for (int i=0; i<n; i++) { int d = S[i].length(); if (d<=3) continue; for (int j=0; j<=d-4; j++) { string w = S[i].substr(j,4); sort(w.begin(), w.end()); if (w[0]+1==w[1] && w[1]+1==w[2] && w[2]+1==w[3]) { cout << S[i] << endl; licz++; break; } } } cout << licz << " haseł jest takich\n"; return 0; // zad 4