Rezolvare completă PbInfo #1483 Coronite

În vederea premierii la un concurs de informatică N candidați sunt rugați să se așeze pe un cerc. Elevii sunt identificați în ordine prin numerele de la 1 la N. Comisia pleacă din dreptul primului elev, face x1 pași pe cerc și pune coronița elevului respectiv. Mai departe, comisia merge în continuare pe cerc x2 pași și pune o a doua coroniță elevului curent. Daca elevul curent are deja o coroniță atunci se numără și acea poziție și trece mai departe. După N astfel de acțiuni premierea se încheie. Premierea se consideră a fi validă dacă toți candidații au primit câte o coroniță.

Cerința

Aflați dacă premierea a fost validă și de asemenea, aflați a câta coroniță a fost pusă elevului cu numărul 1.

Date de intrare

Fișierul de intrare coronite.in conține :

  • Pe prima linie numărul N de elevi.
  • Pe a doua linie, N valori x1, x2, … , xN numere naturale nenule, reprezentând, în ordine, numărul de pași pe cerc pe care îl efectuează comisia pentru premierea următorului elev.

Date de ieșire

Fișierul de ieșire coronite.out va conține:

  • Pe prima linie se va scrie numărul 1 dacă premierea a fost validă sau 0 în caz contrar
    -Pe a doua linie o valoare NR reprezentând a câta coroniță i-a fost acordată elevului cu numărul de concurs 1. Dacă elevul 1 nu a fost premiat valoarea lui NR va fi 0.

Restricții și precizări

  • 1 ≤ N ≤ 100
  • 1 ≤ xi ≤ 2*N
  • Dacă primul copil primește mai multe coronițe, se va afișa numărul de ordine al primei coronițe primite de el.

Exemplul 1

coronite.in

6
3 1 9 4 1 2

coronite.out

1
5

Explicație

Se pun coronite, in ordine, elevilor: 4, 5, 2, 6, 1, 3. Toți elevii au coronițe. Elevului 1 i se pune a 5-a coroniță.

Exemplul 2

coronite.in

4
1 3 4 1

coronite.out

0
2

Explicație

Se pun coronițe elevilor: 2, 1. Elevul 1 primește a 2-a coroniță.

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 Coronite:

#include <fstream>

using namespace std;
ifstream fin("coronite.in");
ofstream fout("coronite.out");
int x[101],sel[101],n;
int main()
{int i,j,nr=0,poz=1,ok;
fin>>n;
for(i=1;i<=n;i++) fin>>x[i];
for(i=1;i<=n;i++)
{
    for(j=1;j<=x[i];j++)
    {
        poz++;
        if (poz>n) poz=1;
    }
    if(poz==1&& sel[1]==0) nr=i;
    sel[poz]=1;
}
ok=1;
for(i=1;i<=n;i++)
    if(sel[i]==0)ok=0;

if(ok)fout<<1<<'\n';
else fout<<0<<'\n';
fout<<nr<<'\n';
    fin.close();fout.close();
    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 Adresa de email.

Rezolvarea problemei #1483 Coronite

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1483 Coronite 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!