|
Titlul: problema pascal Scris de: A Cosmina - vechi din Ianuarie 16, 2009, 21:10:15 Buna! Sunt noua pe aici...Invat Pascal de ceva timp, insa am dat de o problema care imi cam da batai de cap: Se da sirul 1,2,2,3,3,3,4,4,4,4,5.... Se da un nr k , sa se afiseze elementul de pe pozitia k. A doua parte cred ca stiu sa o fac, insa cum initializez eu sirul acela cu 1,2,2,3,3,3,4,4,4,4,5 si tot asa? Dati-mi macar un indiciu... :fool:
Titlul: Răspuns: problema pascal Scris de: Pripoae Teodor Anton din Ianuarie 16, 2009, 22:17:28 Salut
E clar ca sirul e format in felul urmator 1 ... 1 * 2 / 2 .................................1 2 ... 2 * 3 / 2 .................................2 3 ... 3 * 4 / 2 .................................3 ... N ... N * (N + 1) / 2 ........................N Deci tu trebui sa afli N astfel incat N * (N + 1) / 2 < K. Pe pozitia K se va afla N + 1. Cum afli N-ul depinde in functie de limitele valorii K. o(1), o (sqrt(K)), cum iti este mai usor. Spor :) Titlul: Răspuns: problema pascal Scris de: A Cosmina - vechi din Ianuarie 16, 2009, 22:23:42 multumesc pentru sugestie, insa nu am inteles prea bine ce vrei sa spui...mai detaliat se poate? :sad:
Titlul: Răspuns: problema pascal Scris de: Sima Cotizo din Ianuarie 16, 2009, 22:41:22 In sir ai 1 de 1, 2 de 2, 3 de 3 ... n de n. In total ai n*(n+1) / 2 numere (adica 1+2+3+..+n). Tu vrei sa stii cam pentru ce n ai valoarea respectiva mai mica decat k, dar pentru n+1 nu. De ce? Pentru ca e clar ca al k-lea numar este unul dintre cele n+1 numere de valoare n+1. Incearca pe hartie cateva valori si ai sa vezi cum functioneaza ;) Nu cred ca ai nevoie de sir, dar in orice caz:
Cod: var a: array[1..1000] of integer; @Toni: nu cred ca era neaparat nevoie sa ii zici de complexitati ;) Keep it simple! Titlul: Răspuns: problema pascal Scris de: A Cosmina - vechi din Ianuarie 17, 2009, 10:49:38 adica asa?
Cod: program vect_sir; Titlul: Răspuns: problema pascal Scris de: Gabriel Bitis din Ianuarie 17, 2009, 11:32:57 Nu cred ca e bine. Tu folosesti k pentru a pune numerele in vector pe pozitii consecutive. La finalul ciclurilor, k = n * (n + 1) / 2.
Din cum am inteles eu enuntul, citesti o valoare K (tu ai citit n), si trebuie afisat numarul de pe pozitia respectiva in vectorul format. Cred ca trebuie sa afisezi v[n]. Titlul: Răspuns: problema pascal Scris de: A Cosmina - vechi din Ianuarie 17, 2009, 11:47:52 imi raspunde cu exit code=201 in ambele variante
Titlul: Răspuns: problema pascal Scris de: alexandru din Ianuarie 17, 2009, 13:30:25 hm daca te uiti atent gasesti ca fiecare sir incepe de la N(N-1)/2+1 si se termina N*(N+1)/2. Deci ai avea
N*(N-1)/2+1<k<N*(N+1)/2; le inmultesti cu 2 si da N(N-1)+2<2*k<N(N+1); Acum trebuie sa-l scoti pe N:) N(N-1)+2<2*k; si ai N^2-N+2(1-k)<0; delat=1+8(k-1) //ar fi venit 1-8(1-k) dar cum k>1 o sa avem numar negativ si rezultatul cautat este {1+sqrt(delta)}/2; x^y- inseamna x la puterea y deci o implementare ar fi Cod: cin>>k; //citesc k Titlul: Răspuns: problema pascal Scris de: Sima Cotizo din Ianuarie 17, 2009, 14:37:52 In primul rand sper ca nu ai scris exact asa in sursa, pentru ca nici macar n-o sa-ti compileze. Incearca asa:
Cod: program vect_sir; @Gabrel : nu v[n], ci v[k] :) sau v[ x ] in codul de mai sus. Eu asta inteleg @Alexandru: buna rezolvarea in O(1) dar, repet, cred ca o ajuta sa incerce si "varianta babeasca" (pentru limbaj). Titlul: Răspuns: problema pascal Scris de: alexandru din Ianuarie 17, 2009, 15:01:46 sau alta rezolvare "babeasca" dar fara a genera sirul. Observam ca fiecare numar N se repeta de N ori pe scurt
1 odata 2 de doua ori 3 de trei ori etc. deci putem parcurge cu un for de la i=1 pana cand suma numerlor este <k adica Cod: #include<iostream.h> Titlul: Răspuns: problema pascal Scris de: A Cosmina - vechi din Ianuarie 18, 2009, 10:32:05 Buna dimineata :oops:si mersi pentru solutii! poate ca nu chiar sa scriu o carte, dar in orice caz o sa am la ce ma gandi cand merg pe strada....
Citat In primul rand sper ca nu ai scris exact asa in sursa, pentru ca nici macar n-o sa-ti compileze. Incearca asa: Cod: program vect_sir; var v:array[1..100]of integer; n,i,j,k,x:integer; Begin write('n=');readln(n); write('k='); readln(x); k := 0; for i:=1 to n do for j:=1 to i do begin v[k] := i; k := k+1; end; write(v
End. Observa in cod ca daca as citi in variabila k, as pierde-o mai incolo, asa ca citesc in altceva(x). Ai nevoie si de n citit pentru implementarea asta. Exit code 201 cred ca iti da pentru ca ai declarat vectorii doar de 100. Pune o valoare mai mare, gen 100000 acolo (in borland se poate sa nu mearga chiar asa). Gandeste-te ca n-ul trebuie sa indeplineasca conditia n*(n+1)/2 <= 100000 cand introduci datele, altfel abordarea asta nu e posibila (repet, in borland). Eu am freePascal si vad ca merge...Insa cum pot sa fac sa-mi afiseze si sirul? :-k Titlul: Răspuns: problema pascal Scris de: Sima Cotizo din Ianuarie 18, 2009, 11:23:05 Afisarea sirului este un lucru "clasic" pe care il inveti intr-a 9-a. Daca ai trecut de siruri la clasa, atunci ar fi trebuit sa fii mai atenta, daca nu atunci te-ar ajuta sa discuti cu profesoara (daca te pregatesti pentru olimpiada).
In cod adauga asta inainte de ultimul readln: Cod: for i:=1 to k do write(v[i],' '); @alexandru: tradu si in Pascal codul si o vei ajuta mai mult ;) ( poti sa-ti editezi mesajele :P ) Titlul: Răspuns: problema pascal Scris de: A Cosmina - vechi din Ianuarie 18, 2009, 12:00:38 multumesc, ar fi util sa traduci codul...nu ma pregatesc pt olimpiada era doar o problema data...o sa discut cu ea, sa-mi explice :thumbup:mersi :peacefingers:
Titlul: Răspuns: problema pascal Scris de: alexandru din Ianuarie 18, 2009, 12:54:07 Scuze nu stiu Pascal , ar trebui , l-am facut in a 5 si a 6, dar l-am uitat complet plus............. :P
Titlul: Răspuns: problema pascal Scris de: A Cosmina - vechi din Ianuarie 18, 2009, 13:05:20 lasa ca nu-i nimic, vad eu care-i treaba miercuri...pana atunci ma gandesc sa incerc caz particular cu solutia lui Sima Cotizo :)
Titlul: Răspuns: problema pascal Scris de: alexandru din Ianuarie 18, 2009, 20:19:08 Si o mica sugestie cand mai ai probleme cu siruri de generat sau aflat al k termen nu genera tot sirul incearca sa gasesti o relatie astfel incat sa nu generezi sirul ca deobicei e o pierdere de timp si memorie, vor exista relatii intre numere doar trebuie sa le gasesti si daca nu ramane varianta babeasca dar si aici trebuie sa muncesti destul de mult la ea ca sa fie foarte performanta, caz in care mergi la concursuri sau olimpiada :) .....
Si ca sa dau exemplu pentru sirul lui fibonaci Cine stie cum pot genera al n-lea termen si programu l sa aibe complexitatea O(1) ? Sirul fibonaci 0 1 1 2 3 5 8 13 21 34....... Titlul: Răspuns: problema pascal Scris de: Andrei Grigorean din Februarie 14, 2009, 18:01:42 Nu poti in O(1), dar poti in O(log N), cu ridicare logartimitca la putere a unei matrice. Pentru mai multe detalii studiaza problema iepuri (http://infoarena.ro/problema/iepuri) din arhiva.
Titlul: Răspuns: problema pascal Scris de: alexandru din Februarie 15, 2009, 20:21:30 Uite aici forumla
1/√5 {⌈(1+√5)/2⌉^n│-⌈(1-√5)/2⌉^n } unde √5=sqrt(5); Titlul: Răspuns: problema pascal Scris de: Andrei Grigorean din Februarie 15, 2009, 20:59:50 Din pacate formula nu are complexitatea O(1) si nici nu poate fi aplicata cu succes, deoarece trebuie sa ridici un numar real la o putere.
Titlul: Răspuns: problema pascal Scris de: redco mihai din Decembrie 11, 2016, 22:40:52 buna ajutati-ma va rog nu prea ma pricep la stringuri
De la tastatură se introduce un text.Elaborați un program care va afișa pe ecran lungimea celui mai lung cuvînt. |