•miculprogramator
|
|
« : Martie 08, 2009, 22:49:03 » |
|
Salut! Am urmatoarea problema: "La un concurs scolar de patinaj, fiecare concurent este notat de o echipa formata din n arbitrii. Un arbitru are voie, conform regulamentului, sa acorde o nota de la 1 la 100 concurentului care evolueaza.Fiecare arbitru transmite arbitrului-sef nuta lui,iar acesta calculeaza punctajul final al concurentului astfel: elimina nota maxima si nota minima, apoi face media aritmentica a notelor ramase." ........... for (i=1;i<=n;i++) { if (max<v[i]) max=v[i]; //max a avut initial valoarea 0 if (min>v[i]) min=v[i]; //min a avut initial valoarea 400 s=s+v[i]; } s=s-max; s=s-min; m=s/(n-2) cout<<"media="<<m; }
CE GRESESC?
|
|
|
Memorat
|
|
|
|
•gabor_oliviu1991
|
|
« Răspunde #1 : Martie 08, 2009, 22:56:26 » |
|
probabil ca gresesti daca ai mai multe medii minime/maxime. si ca trebuie sa ai media de tip real.
|
|
|
Memorat
|
|
|
|
•miculprogramator
|
|
« Răspunde #2 : Martie 08, 2009, 23:15:18 » |
|
nu, am pus ca media este de tip float
|
|
|
Memorat
|
|
|
|
•gabitzish1
|
|
« Răspunde #3 : Martie 08, 2009, 23:26:32 » |
|
Spune si ce nu'ti da bine... s de ce tip e? Nu trebuie sa pui m = (float)s / (n - 2) ? (... asta daca s e intreg)
|
|
|
Memorat
|
|
|
|
•miculprogramator
|
|
« Răspunde #4 : Martie 08, 2009, 23:31:51 » |
|
pai de ex daca pun: n=4 100,50,90,90 arata m=-80
|
|
|
Memorat
|
|
|
|
•gabitzish1
|
|
« Răspunde #5 : Martie 08, 2009, 23:35:03 » |
|
Ai initializat m = 0 ?
|
|
|
Memorat
|
|
|
|
•gabor_oliviu1991
|
|
« Răspunde #6 : Martie 08, 2009, 23:41:09 » |
|
chiar s trebuie initializat defapt
|
|
|
Memorat
|
|
|
|
•miculprogramator
|
|
« Răspunde #7 : Martie 08, 2009, 23:44:03 » |
|
da, am initializat ambele variabile cu 0 (trecute in tipul float) am initializat si min, max dar ce are daca pun sa zicem : n=4 1000,50,100,100 m=375
|
|
|
Memorat
|
|
|
|
•gabor_oliviu1991
|
|
« Răspunde #8 : Martie 08, 2009, 23:50:19 » |
|
ceva nu calculezi cum trebuie. plus ca: Un arbitru are voie, conform regulamentului, sa acorde o nota de la 1 la 100 concurentului care evolueaza eu zic sa iti determini minimul si maximul, parcurgi vectorul si daca v[ i ] != min si v[ i ] != max adaugi la suma si iti retii cate elemente ai adaugat la suma. si dupa imparti suma la numarul de elemente. ceva de genu: min = 32000; max = 0; for(i = 1; i <= n; i++) if(v[i] < min) min = v[i]; if(v[i] > max) max = v[i];
s = 0; k = 0; for(i = 1; i <= n; i++) if(v[i] !=min && v[i] != max) { s+=v[i]; k++; }
g<<s/k;
nu am verificat dar ar trebui sa mearga
|
|
|
Memorat
|
|
|
|
•devilkind
|
|
« Răspunde #9 : Martie 08, 2009, 23:50:46 » |
|
de ce primul numar e 1000? Tu initializezi max cu 400 care e mai mic decat acel 1000.
|
|
|
Memorat
|
|
|
|
•gabitzish1
|
|
« Răspunde #10 : Martie 08, 2009, 23:56:38 » |
|
#include <cstdio> int N, S, min, max, x; double m;
int main() { freopen("prob.in","r",stdin); freopen("prob.out","w",stdout);
scanf("%d",&N);
min = 101; for (int i = 1; i <= N; i++) { scanf("%d",&x); if (x > max) max = x; if (x < min) min = x; S += x; } S -= (max + min); m = (double) S / (N - 2); printf("%lf\n", m); return 0; } Vezi ce nu faci la fel....
|
|
|
Memorat
|
|
|
|
•miculprogramator
|
|
« Răspunde #11 : Martie 08, 2009, 23:59:51 » |
|
am uitat ca nu am voie sa pun 1000, probabila sta mi-a incurcat si minimul dar, cum spune "gaboru corupt" am incercat si afiseaza pentru : n=4 100,50,90,90 m=50 cod: for (i=1;i<=n;i++) { if ( (v[i]!=min) && (v[i]!=max)) s=s+v[i]; } m=s/(n-2)
ma uit maine dim la eal, ca's rupta iar daca pun if ( (v[i]!=min) && (v[i]!=max)) { s=s+v[i]; nr++; //nr initializat cu 0 }
imi afiseaza m=75
|
|
|
Memorat
|
|
|
|
•gabor_oliviu1991
|
|
« Răspunde #12 : Martie 09, 2009, 00:11:12 » |
|
am uitat sa deschid un bloc in primul FOR min = 32000; max = 0; for(i = 1; i <= n; i++) { if(v[i] < min) min = v[i]; if(v[i] > max) max = v[i]; }
s = 0; k = 0; for(i = 1; i <= n; i++) if(v[i] !=min && v[i] != max) { s+=v[i]; k++; }
g<<s/k;
|
|
|
Memorat
|
|
|
|
•miculprogramator
|
|
« Răspunde #13 : Martie 09, 2009, 18:32:00 » |
|
merge, slava domnului...mersi! cred ca eu greseam ca in acelasi for citeam si componentele si le faceam si min,max...mersi!
|
|
|
Memorat
|
|
|
|
•gabor_oliviu1991
|
|
« Răspunde #14 : Martie 09, 2009, 19:01:34 » |
|
nu cred ca aia era problema. Gabi determina min/max in for unde citeste in programul de mai sus si merge. probabil ca daca aparea minimul sa zicem de 3 ori, tu nu il scadeai de 3 ori, doar o data.
|
|
|
Memorat
|
|
|
|
•gabitzish1
|
|
« Răspunde #15 : Martie 09, 2009, 20:45:03 » |
|
Nu cred ca trebuie scazut de 3 ori minimul daca frecventa lui este 3. Programul trebuie sa prelucreze punctajele arbitrilor si ma gandesc ca trebuie sa le prelucreze ca si in realitate, adica sa scada cele mai "eronate" 2 scoruri (cel mai mare si cel mai mic). Daca toate elementele din sir ar fi egale, punctajul nu ar trebui sa fie 0. Parerea mea e ca trebuie scazut maximul si minimul o singura data.
|
|
|
Memorat
|
|
|
|
•gabor_oliviu1991
|
|
« Răspunde #16 : Martie 09, 2009, 21:21:36 » |
|
scuze, eram cam nedocumentat. am cautat regulamentul pt sarituri cu schiurile (cred ca e la fel ca la patinaj) si zice ca cel mai mare si cel mai mic sunt eliminate, si scorul final e media aritmetica a celor 3 ramase
|
|
|
Memorat
|
|
|
|
•c_e_manu
|
|
« Răspunde #17 : Martie 09, 2009, 21:29:11 » |
|
scuze, eram cam nedocumentat. am cautat regulamentul pt sarituri cu schiurile (cred ca e la fel ca la patinaj) si zice ca cel mai mare si cel mai mic sunt eliminate, si scorul final e media aritmetica a celor 3 ramase la sarituri nota cea mai mare si cea mai mica se elimina, se aduna celelalte 3 si se aduna punctele pe saritura... asta e punctajul final... de unde te-ai doucmentat? ca nu e prea bine ce ai zis pe acolo
|
|
|
Memorat
|
|
|
|
•gabor_oliviu1991
|
|
« Răspunde #18 : Martie 09, 2009, 21:32:31 » |
|
am revenit asupra afirmatiei post-anterioare si m-am corectat. am cautat regulamentul FIS. pana la urma am inteles
|
|
|
Memorat
|
|
|
|
|