Informatică, întrebare adresată de Monymony07, 9 ani în urmă

Rareş a primit în dar o carte în care paginile sunt amestecate. Se hotărăşte totuşi să o citească, răsfoind cartea într-un singur sens, de la prima pagină către ultima, în ordinea aşezării lor în carte, respectând următorul algoritm:

Caută la început pagina numerotată cu x=1.

După ce a citit pagina cu numărul x caută printre paginile următoare acestei pagini, răsfoind cartea, pagina cu numărul x+1, fără a căuta printre paginile aşezate înaintea paginii cu numărul x. Dacă o găseşte atunci va continua lectura în acelaşi mod, iar dacă nu o găseşte atunci va închide cartea şi, în ziua următoare, va relua lectura de la pagina cu numărul x+1, pe care mai întâi o va caută răsfoind cartea de la început.

Rareş va proceda la fel şi în zilele următoare până când va citi întreaga carte.

Cerinţă
Scrieţi un program care citeşte un număr natural n, reprezentând numărul paginilor din carte şi n numere naturale distincte x1, x2,…, xn, reprezentând ordinea în care sunt aşezate cele n pagini în carte, şi care determină:
a) numărul zilelor în care Rareş citeşte cartea;
b) prima zi în care Rareş a citit cele mai multe pagini şi numărul paginilor citite în acea zi.

Date de intrare
Fișierul de intrare carte.in conține pe prima linie numărul n al paginilor din carte iar pe linia următoare n numere întregi distincte x1, x2,…, xn, separate prin câte un spaţiu, reprezentând ordinea în care sunt aşezate paginile în carte.

Date de ieșire
Fișierul de ieșire carte.out va conține pe prima linie, separate prin câte un spaţiu, trei numere, reprezentând, în ordine :

numărul zilelor în care Rareş citeşte cartea;
numărul primei zile în care Rareş a citit cele mai multe pagini;
numărul maxim de pagini citite într-o zi.
Restricții și precizări
0 < n < 10001
paginile cărţii sunt numerotate cu numere naturale distincte de la 1 la n;
citirea cărţii presupune citirea fiecărei pagini din carte, o singură dată;
zilele în care Rareş citeşte cartea sunt numerotate consecutiv, începând cu numărul 1;
pentru rezolvarea corectă a subpunctului a) se acordă 40% din punctaj şi pentru rezolvarea corectă a subpunctului b) se acordă 60% din punctaj.

Exemplu
carte.in

9
7 1 3 6 8 2 4 9 5
carte.out

4 2 3
Explicație
în prima zi citeşte paginile 1, 2
în a doua zi citeşte paginile 3, 4, 5
în a treia zi citeşte pagina 6
în a patra zi citeşte paginile 7, 8, 9
A terminat de citit cartea în 4 zile iar ziua 2 este prima zi în care a citit cele mai multe pagini (3).

Răspunsuri la întrebare

Răspuns de ap53
8
#include <fstream>
using namespace std;

int main()
{
ifstream in("carte.in");
ofstream out("carte.out");
int i,j,n,v[10001],zi,maxi,zimaxi,contor;
in>>n;
for(i=1;i<=n;i++)
   in>>v[i];
j=1;
zi=0;
maxi=0;
while(j<=n)
{
contor=0;
for(i=1;i<=n;i++)
if(v[i]==j)
{
 j++;
 contor++;
}
if(maxi<contor)
{
maxi=contor;
zimaxi=zi;
}
zi++;
}
out<<zi<<" "<<(zimaxi+1)<<" "<<maxi;
return 0;
}
Alte întrebări interesante