Informatică, întrebare adresată de iboom3421, 8 ani în urmă

pls help cu problema de mai jos... pls... dau coroana
Pentru cei elevi din clasa a VI-a competiția este foarte importantă și, pentru a se pregăti suplimentar, aceștia lucrează de pe site-ul www.PROBLEMEINFORMATICA.RO.

Pentru a-i încuraja, profesoara de informatică le promite câte o notă de 10 primilor k elevi, cei mai harnici și sârguincioși.

Dacă observă că mai sunt elevi care au același număr de probleme rezolvate ca și cel de pe poziția k, atunci profesoara, echidistantă, mai pune în plus note de 10 la toți aceștia.

Cerința
Să se scrie un program care, citind numărul N de elevi ai clasei, numărul k de elevi notați cu 10 și N valori reprezentând numărul de probleme rezolvate de fiecare elev, rezolvă cerințele:

1. Afișează în ordine descrescătoare numărul de problem lucrate de elevii care vor primi nota 10.
2. Afișează în ordinea descrescătoare a numărului de probleme rezolvate, numerele de ordine ale tuturor elevilor care primesc nota 10.

Date de intrare
Fișierul de intrare zece.in conține pe prima linie un număr natural C (C poate avea doar valoarea 1 sau valoarea 2). A doua linie conține, în această ordine, separate printr-un un spațiu, numerele N și k. A treia linie conține, în ordine numărul de probleme rezolvate de cei N copii, numerotați de la 1 la N, exprimate prin numere naturale, despărțite prin câte un spațiu.

Date de ieșire
Dacă valoarea lui C este 1, se va rezolva numai cerința 1). În acest caz, fişierul de ieșire zece.out va conține pe prima linie minim k numere naturale reprezentând numărul de probleme rezolvate de elevii care primesc nota 10, în ordinea descrescătoare a acestora (valorile vor fi separate de câte un spațiu).

Dacă valoarea lui C este 2, se va rezolva numai cerința 2). În acest caz, fişierul de ieșire zece.out va conține pe prima linie minim k numere naturale reprezentând numerele de ordine ale elevilor în ordinea descrescătoare a numărului de probleme rezolvate de aceștia. Dacă sunt elevi care au același număr de probleme rezolvate se vor afișa elevii în ordinea crescătoare a poziției lor (valorile vor fi separate de câte un spațiu).

Restricții și precizări
1 ≤ N ≤ 1000
1 ≤ k ≤ N
cele N numere citite vor fi mai mici decât 1.000.000
Exemplul 1
zece.in

1
5 3
18 45 55 60 45
zece.out

60 55 45 45
Explicație
Cerința este 1.
N=5, K=3
Cele mai multe probleme rezolvate sunt 60 55 45 dar pentru că avem doi elevi cu 45 de probleme, vor primi nota 10, 4 elevi, în loc de 3.

Exemplul 2
zece.in

2
5 3
18 45 55 60 45
zece.out

4 3 2 5
Explicație
Cerința este 2.
N=5, K=3
Elevul situat pe poziția 4 are cele mai multe probleme – 60, este urmat de elevul de pe poziția 3 care are 55 de probleme și apoi de elevii de pe pozițiile 2 și 5 care au fiecare câte 45 de probleme.


E problema #1946 de pe pbinfo.ro

Răspunsuri la întrebare

Răspuns de boiustef
4

Răspuns:

Explicație:

#include <iostream>

#include <fstream>

#include <algorithm>

using namespace std;

ifstream f("zece.in");

ofstream g("zece.out");

struct elev{

   int probrez;

   int poz;

}v[1001];

bool descr(elev a, elev b)

{

   if (a.probrez==b.probrez)

   {

       return a.poz<b.poz;

   }

   else return a.probrez>b.probrez;

}

int n,k,i, c;

int main()

{

   f >> c >> n >> k;

   for (i=1; i<=n; ++i)

   {

       f >> v[i].probrez;

       v[i].poz=i;

   }

   sort(v+1,v+n+1,descr);

   if (c==1)

   {

       for (i=1; i<=k; ++i)

           g << v[i].probrez << " ";

       i=k+1;

       while (v[i].probrez==v[i-1].probrez)

       {

           g << v[i++].probrez << " ";

       }

   }

   else

   {

       for (i=1; i<=k; ++i)

           g << v[i].poz << " ";

       i=k+1;

       while (v[i].probrez==v[i-1].probrez)

       {

           g << v[i++].poz << " ";

       }

   }

}


iboom3421: e de 0 puncte
boiustef: adică eu o verific pe pbinfo, iau 100 de puncte, o pun aici cu dorinţa de a te ajuta, iar tu reacţionezi astfel... şi o evaluezi atât de urât...
boiustef: ai spune şi ce eroare îţi dă?
Ca sa stii, in momentul cand copiezi un cod de pe brainly si acesta are "spatii" la inceput, cand copiezi programu' o sa-ti arate ceva genu' ( https://prnt.sc/n6n3kr ) Eroarea ta sunt liniile alea rosii.. Copiaza codu' in word sau in ceva si dupa pune l in codeblocks sau in ce ai testat tu programu'. Sau pur si simplu sterge fiecare spatiu de la inceput..
boiustef: mai întâi e normal să te lămureşti şi să te consulţi despre eroare şi după evaluezi...
boiustef: cu atât mai mult că sunt mândru de algoritmul aplicat.
boiustef: :)))
Alte întrebări interesante