Hey lume, am si eu nevoie de ajutor la problema 95 de pe poza atasata:
Răspunsuri la întrebare
Răspuns:
Din moment ce ai spus ca ai nevoie de ajutor la problema aia, eu consider ca vrei o indicatie, nu program c++. Deci ai face asta in felul urmator.
Explicație:
Citesti acel r intr-un vector de caractere, adica ai ceva de genul char r[20]
Cauti cu un i care pleaca de la strlen(r) - 1 pana la 0 sau pana gasesti punct, numarand cate zecimale sunt (strlen(r) -1 pt ca strlen(r) numara si acel '\0')
Sa cauti si cate numere sunt pana la zecimale, te va ajuta mai incolo (sa numeri si punctul)
Daca sunt mai multe zecimale decat n, atunci faci for de la strlen(r) -1 si stergi zecimalele in plus, punand '\0' cu grija unde trebuie pus, astfel incat sa ai exact n zecimale
Altfel
Faci for de la strlen(r) pana la n + cate numere ai pana la zecimale, incluzand punctul (sa ai grija sa pui '\0' unde trebuie, adica la n + w/e + 1)
Faci iar for ca sa gasesti punctul si ii tii minte pozitia
Faci din nou for de la 0 pana la pozitia punctului - n + 1 si tai ce e pana acolo, adica tragi tot vectorul in stanga cu o pozitie de fiecare data (adica elimini prima pozitie) si scazi acel iterator din for, adica i cu 1 si scazi si pozitia punctului cu 1 (pentru ca tu cand afisezi, ei vor triunghi, deci nu ai ce sa faci decat sa tai ce e inainte)
Acum punctul tau ar trebui sa fie exact in mijloc -1 daca strlen(r) % 2 == 0 (adica daca e impara lungimea, pentru ca numara si '\0') sau in exact r[strlen(r) % 2] daca strlen(r)%2 == 1 (pentru ca jumatatea ar fi fix in mijlocul vectorului si cum tu calculezi jumatatea cu un int, ala o sa fie rotunjit de la... 4.5 la 4 (evident, asta e un exemplu))
Creezi o variabila de tip int poz(de exemplu), pe care o initializezi cu pozitia punctului si inca o variabila int move = 0.
Acum tu afisezi intr-un triple for piramida in complexitate O(n log n) modul urmator:
Primul for se duce de la 0 pana la n.
In acel prim for ai un al doilea for in care afisezi de poz ori caracterul ' ' (adica space)
Afisezi r[poz - move]
Daca move != 0
Afisezi de move ori spatiu cu un al 3-lea for in primul for si dupa afisezi r[poz + move]
inainte sa inchizi primul for, cresti move cu 1
Acum ar trebui sa fie gata si sa faca ce ai vrea. Da comm daca ti se pare ca am gresit ceva sau daca ai nelamuriri.