Adrian participă la o expediţie, împreună cu colegii lui. La un moment dat, copiii descoperă, lângă un copac, 5 tăbliţe vechi. Primele 4 tăbliţe sunt inscripţionate complet. Prima tăbliţă conţinea textul : “Grupa 1 conţine numărul 1”, a doua tăbliţă avea textul : „Grupa 2 conţine numerele 2 şi 3”, a treia tăbliţă avea textul: „Grupa 3 contine numerele 4,5 şi 6” , a patra tăbliţă avea textul: „Grupa 4 conţine numerele 7,8,9 şi 10.” Pe următoarea tăbliţă găsită era înscris un singur număr, celelalte numere şi numărul grupei erau şterse. Adrian le solicită colegilor lui să descopere ce grupă era scrisă pe a cincea tabliţă găsită. exemplu : tablita.in : 100 , tablita.out : 14
am facut programul dar cand il incarc pe site ul de verificare primesc 0 puncte. E programul gresit ? Eu nu vad de ce n ar fi bun. Va rog spunetimi daca e corect sau nu ,nu daca exista variante mai simple . Ideea este ca mie imi merge ,am incercat cu foarte multe exemple si nu stiu de ce primesc 0 puncte.
#include
using namespace std;
ifstream fin("tablita.in");
ofstream fout("tablita.out");
int main()
{
long long n,gr,i,a,n1=0,p=1,k=1,maxim=0,o=0;
fin>>n;
for (gr=1;gr<=n;gr++) { o=o+gr;
for (i=maxim+1;i<=o;i++) {
if (maxim
if (i==n) {
fout<
a=0;
break;
}
p++;
}
if (a==0) break;
}
return 0;
}
stassahul:
Daca iti trebuie, iti spun cum am dedus formula :)
Răspunsuri la întrebare
Răspuns de
5
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin("tablita.in");
ofstream fout("tablita.out");
double n;
int main()
{
fin >> n;
fout << ceil((-1+sqrt(1+8*n))/2);
return 0;
}
De unde s-a dedus formula (ca asa am vazut ca chiar solutia oficiala a olimpiezii foloseste un while):
Pentru a rezolva problema, ne ajuta matematicianul Gauss, dar anume formula lui pentru suma numerelor pina la n: S=n*(n+1)/2, cred ca daca cineva a ajuns sa rezolva asa tip de probleme, deja o cunoaste.
Din problema trebuie sa ne dam seama ca S reprezinta numarul scris pe tablita, iar n grupa in care face parte.
Deoarece ne este dat S si ni se cere n-ul trebuie sa facem o formula pentru a il afla:
S=n*(n+1)/2
2*S=n*(n+1)
2*S=n²+n
n²+n-2*S=0
Avem o ecuatie de gradul 2, unde delta va fi: Δ=1+8*S
Prima solutie va fi: n1=(-1-√(1+8*S)/2, dar observam ca va fi mereu negativa, dar numarul grupei nu poate fi negativ, atunci solutia nu merge
A doua solutie va fi n2=(-1+√(1+8*S))/2, exact ce ne trebuie.
Acum ce face "ceil-ul" cela.
Vezi ca intr-o grupa pot fi mai multe numere, iar dupa formula noastra ni se da mereu un numar real (in afara de unele cazuri exceptie, de ex. 1).
Aici trebuie sa observam ca daca avem un numar zecimal de ex. 1.4 trebuie sa-i MARIM valoarea pina la un numar intreg, in exemplu trebuie sa fie 2. Daca de ex. 13.32 va fi 14, 56.89 va fi 57 si asa mai departe. Deci functia "ceil" rotunjeste pina la urmatorul numar natural (doar daca deja este un numar natural, atunci nu va rotunji), ceea ce ne trebuie.
#include <cmath>
using namespace std;
ifstream fin("tablita.in");
ofstream fout("tablita.out");
double n;
int main()
{
fin >> n;
fout << ceil((-1+sqrt(1+8*n))/2);
return 0;
}
De unde s-a dedus formula (ca asa am vazut ca chiar solutia oficiala a olimpiezii foloseste un while):
Pentru a rezolva problema, ne ajuta matematicianul Gauss, dar anume formula lui pentru suma numerelor pina la n: S=n*(n+1)/2, cred ca daca cineva a ajuns sa rezolva asa tip de probleme, deja o cunoaste.
Din problema trebuie sa ne dam seama ca S reprezinta numarul scris pe tablita, iar n grupa in care face parte.
Deoarece ne este dat S si ni se cere n-ul trebuie sa facem o formula pentru a il afla:
S=n*(n+1)/2
2*S=n*(n+1)
2*S=n²+n
n²+n-2*S=0
Avem o ecuatie de gradul 2, unde delta va fi: Δ=1+8*S
Prima solutie va fi: n1=(-1-√(1+8*S)/2, dar observam ca va fi mereu negativa, dar numarul grupei nu poate fi negativ, atunci solutia nu merge
A doua solutie va fi n2=(-1+√(1+8*S))/2, exact ce ne trebuie.
Acum ce face "ceil-ul" cela.
Vezi ca intr-o grupa pot fi mai multe numere, iar dupa formula noastra ni se da mereu un numar real (in afara de unele cazuri exceptie, de ex. 1).
Aici trebuie sa observam ca daca avem un numar zecimal de ex. 1.4 trebuie sa-i MARIM valoarea pina la un numar intreg, in exemplu trebuie sa fie 2. Daca de ex. 13.32 va fi 14, 56.89 va fi 57 si asa mai departe. Deci functia "ceil" rotunjeste pina la urmatorul numar natural (doar daca deja este un numar natural, atunci nu va rotunji), ceea ce ne trebuie.
Alte întrebări interesante
Matematică,
8 ani în urmă
Engleza,
8 ani în urmă
Franceza,
8 ani în urmă
Istorie,
9 ani în urmă
Matematică,
9 ani în urmă