Gigel a primit spre păstrare un set de n
cutii de greutăţi nu neapărat distincte. El a cântărit cutiile şi pentru fiecare greutate distinctă a notat pe o foaie, în ordine crescătoare a greutăţilor, numărul de cutii cu greutatea respectivă.
Deoarece fratele său mai mic avea prostul obicei să se joace cu numerele scrise de el pe foaie, Gigel s-a gândit să calculeze un „număr de control” după următorul algoritm: începând de la primul număr a grupat numerele de apariţii ale greutăţilor câte trei (dacă îi rămân numere negrupate la sfârşit, le ignoră). Dacă într-un grup sunt numai numere pare sau numai impare notează grupul cu cifra 1
, altfel îl notează cu cifra 0
. Din şirul astfel obţinut, se formează un număr care are ca valoare cifra zecilor egală cu numărul de valori 1
şi cifra unităţilor egală cu numărul de valori 0
, obţinându-se astfel „numărul de control”.
Cerința
Citind greutăţile cutiilor, să se determine „numărul de control” şi să se verifice dacă este număr prim.
Date de intrare
Pe prima linie a fişierului de intrare control2.in
se găseşte numărul natural n
, iar pe următoarele n
linii câte un număr natural, reprezentând greutăţile celor n
cutii.
Date de ieșire
Fişierul control2.out
va conţine pe prima linie „numărul de control”, urmat, pe linia a doua, de valoarea 0
sau 1
. Pe linia a doua se va afişa 1
dacă numărul este prim, respectiv 0
în caz contrar.
Restricții și precizări
1 ≤ n ≤ 100
- fiecare greutate este un număr natural, mai mic sau egal cu
200
Exemplu
control2.in
21 1 3 2 6 2 6 2 8 9 8 8 9 10 8 11 18 11 12 14 15 17
control2.out
31 1
Explicație
După ordonare se obţine şirul: 1 2 2 2 3 6 6 8 8 8 8 9 9 10 11 11 12 14 15 17 18
Se obţine apoi \(\underset{1}{\underbrace{1 3 1}}\) \(\underset{1}{\underbrace{2 4 2}}\) \(\underset{0}{\underbrace{1 2 1}}\) \(\underset{1}{\underbrace{1 1 1}}\) \(1\).
Din valorile 1 1 0 1
se obţine numărul de control 31, care este număr prim.
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 control2:
#include <fstream>
using namespace std;
ifstream fin("control2.in");
ofstream fout("control2.out");
int main(void)
{
int greutati[100], numarGreutati, aparitii[100], numarApariti=0, numarControl=0, elementeSumaControl[2], estePrim = 1;
elementeSumaControl[0] = elementeSumaControl[1] = 0;
/* citirea greutatilor */
fin >> numarGreutati;
for (int i = 0; i < numarGreutati; i++) {
fin >> greutati[i];
}
/* ordonarea crescatoare a acestora */
for (int i = 0; i < numarGreutati - 1; i++) {
for (int j = i + 1; j < numarGreutati; j++) {
if (greutati[i] > greutati[j]) {
int aux = greutati[i];
greutati[i] = greutati[j];
greutati[j] = aux;
}
}
}
/* le grupam dupa numarul de aparitii */
{
int i = 0;
while(i < numarGreutati) {
int count = 1;
if (greutati[i] == greutati[i+1]) {
while (greutati[i] == greutati[i+1] && i < numarGreutati) {
count++;
i++;
}
}
aparitii[numarApariti++] = count;
i++;
}
}
/* parcurgem greutatile cate 3 */
for(int i = 0; i < numarApariti / 3 * 3; i += 3) {
elementeSumaControl[aparitii[i] % 2 == aparitii[i + 1] % 2 && aparitii[i] % 2 == aparitii[i + 2] % 2]++;
}
/* construim numarul de contorl */
numarControl = elementeSumaControl[0] + elementeSumaControl[1] * 10;
/* verificam daca este prim */
if (numarControl % 2==0)
{
estePrim = (numarControl == 2);
}
else
{
for(int d = 3; d * d <= numarControl; d += 2) {
if(numarControl % d == 0) {
estePrim = 0;
break;
}
}
}
fout << numarControl << '\n' << estePrim;
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 .
Rezolvarea problemei #1443 control2
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1443 control2 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!