infoarena

infoarena - concursuri, probleme, evaluator, articole => Teme => Subiect creat de: Tanase Marian din Octombrie 14, 2013, 22:03:28



Titlul: Problema clasa 9 intensiv
Scris de: Tanase Marian din Octombrie 14, 2013, 22:03:28
Am o problema care zice ca se da un sir de nr de genu' 1, 1,2, 1,2,3 , 1,2,3,4 etc... si se citeste un nr N de la tastatura.Sa se scrie al N-lea numar din sirul de mai sus.
EX: pentru n=3 sa se afiseze 2 pentru n=6 sa se afiseze 3.
Mi-am batut capu 2 ore la ea si nu inteleg ce sa ii fac...ma puteti ajuta cu niste sfaturi sau instructiuni? direct in c++


Titlul: Răspuns: Problema clasa 9 intensiv
Scris de: George Marcus din Octombrie 14, 2013, 22:13:16
Pai generezi sirul si cand ai ajuns la al N-lea element te opresti. Daca ai probleme la generarea sirului, ai nevoie doar de x=pana la cat merge secventa curenta (pentru 1,2,3, x=3) si la al catelea element esti.


Titlul: Răspuns: Problema clasa 9 intensiv
Scris de: Rares Cheseli din Octombrie 14, 2013, 22:25:55
Asa iti generezi termenii sirului
Cod:
#include <iostream>
using namespace std;

int main()
{
    int n;
    cin>>n;
    for (int i=1; i<=n; ++i)
        for (int j=1; j<=i; ++j) cout<<j<<' ';

    return 0;
}



Titlul: Răspuns: Problema clasa 9 intensiv
Scris de: Tanase Marian din Octombrie 16, 2013, 21:57:05
Nu merge generat asa pentru ca siru este gata generat cum s'ar zice..adica nu se citeste un N pentru generarea sirului si dupa sa mearga pana la N...sirul este asa pana la infinit iar eu trb sa gasesc elementu N care poate fi si 1512 :-??


Titlul: Răspuns: Problema clasa 9 intensiv
Scris de: Alexandru Valeanu din Octombrie 16, 2013, 22:20:07
O sa incerc sa-ti explic pe exemplu si te prinzi tu de generalizare. In primul rand se observa ca ai grupe de 1,2,3,4,...m,... elemente deci poti afla in ce grupa se afla al n-elea cautat.
Deci N = 6 si cauti grupa de forma x*(x+1)/2 = N.
x*(x+1)/2 = 6;
x2 + x - 12 = 0;
x1,2 = (-1 +- rad(49))/2
Tu ai nevoie doar de solutia pozitiva deci x = (-1+7)/2 = 3.
Rezulta ca N se afla in grupa a treia...deci are 2 grupe in fata. Astfel poti determina pozitia sa in grupa scazand din el cate elemente se afla inaintea lui in sir adica 2*3/2 ( = nr_grupe*(nr_grupe+1)/2 ). Deci 6 - 3 = 3 rezultatul cautat. Sper ca ai inteles cat de cat cum se rezolva. Succes!


Titlul: Răspuns: Problema clasa 9 intensiv
Scris de: Petronel Catalin Joldescu din Octombrie 28, 2013, 21:10:08
Mi se pare o problema foarte interesanta... m-am prins dupa cateva exemple cam cum se face... insa nu stiu daca sunt foarte explicit. Daca scrii primele 20-30 de elemente pe o foaie o sa observi ca prima aparitie a unui numar i se va afla pe pozitia i(i-1)/2+i. De aici mai departe nici nu stiu cum sa iti explic :| dar iti spun: scrie pe  o foaie cateva numere si sigur o sa te prinzi. Uite un programel pe care l-am realizat eu, insa i se plimba de la 1 pana la 10^7 ( ii poti schimba tu valoarea).


Cod:
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
int n,p,i,j;
cout<<"p=";
cin>>p;
for(i=0;i<10000000;i++)
if(p==i*(i+1)/2)
cout<<"pe pozitia "<<p<<" se afla numarul "<<i;
for(i=0;i<10000000;i++)
for(j=1;j<=i;j++)
if(p==i*(i+1)/2+j)
cout<<"pe pozitia "<<p<<" se afla numarul "<<j;
}