infoarena

infoarena - concursuri, probleme, evaluator, articole => Informatica => Subiect creat de: Iacob Ioan Fanica din Iulie 26, 2011, 17:45:16



Titlul: Sume (problema semne)
Scris de: Iacob Ioan Fanica din Iulie 26, 2011, 17:45:16
Ma poate ajuta cineva va rog cu niste indicii pentru rezolvarea urmatoarei probleme:

Se da un numar natural n. Sa se insereze semnele + si - in expresia 1 ? 2 ? ... ? n astfel incat rezultatul obtinut prin evaluarea expresiei sa fie 0. Exemple: n=3 -> 1+2-3=0, n=4 -> 1-2-3+4=0, n->9 - imposibil. Indicatie: este nevoie de gasirea conditiei de existenta a solutiei si de o aranjare a semnelor (oricare, solutia nu este unica) care sa satisfaca enuntul.

Multumesc anticipat.


Titlul: Răspuns: Sume (problema semne)
Scris de: MciprianM din Iulie 26, 2011, 18:11:16
Fa un back care sa iti afiseze toate solutiile pt n de la 1 la 20 de exemplu si gaseste un pattern.


Titlul: Răspuns: Sume (problema semne)
Scris de: Iacob Ioan Fanica din Iulie 26, 2011, 18:14:51
Fa un back care sa iti afiseze toate solutiile pt n de la 1 la 20 de exemplu si gaseste un pattern.

Hmm, am sa incerc si lucrul asta :). Sper sa fie ceva pattern iin secventele de semne +/-, ca m-am tot gandit azi la niste solutii si am zis ca poate nu am nevoie de back.


Titlul: Răspuns: Sume (problema semne)
Scris de: Mihai Calancea din Iulie 26, 2011, 18:43:42
Ca sa existe solutie , ai nevoie ca suma lor sa fie divizibila cu 2.  n * (n + 1) / 2  se divide cu 2 inseamna ca n se divide cu 4 sau n + 1 se divide cu 4.
Daca n e divizibil cu 4 iei toate perechile i , n - i + 1 si le pui pe rand, alternativ, in multimea celor negative respectiv a celor pozitive.

1 2 3 4 5 6 7 8 :  (1, 8 ) (3, 6) cu plus , celelalte cu minus.

Daca n + 1 e divizibil cu 4 faci aceeasi chestie pentru primele n - 1 numere, si pe al n-lea il pui in multimea cu suma mai mica.

1 2 3 4 5 6 7

Alternativ, poti face knapsack in O(n ^ 3).


Titlul: Răspuns: Sume (problema semne)
Scris de: Iacob Ioan Fanica din Iulie 26, 2011, 19:42:53
Ca sa existe solutie , ai nevoie ca suma lor sa fie divizibila cu 2.  n * (n + 1) / 2  se divide cu 2 inseamna ca n se divide cu 4 sau n + 1 se divide cu 4.
Daca n e divizibil cu 4 iei toate perechile i , n - i + 1 si le pui pe rand, alternativ, in multimea celor negative respectiv a celor pozitive.

1 2 3 4 5 6 7 8 :  (1, 8 ) (3, 6) cu plus , celelalte cu minus.

Daca n + 1 e divizibil cu 4 faci aceeasi chestie pentru primele n - 1 numere, si pe al n-lea il pui in multimea cu suma mai mica.

1 2 3 4 5 6 7

Alternativ, poti face knapsack in O(n ^ 3).

Mersi mult, am gasit si un pattern pe pare si impare:
pare: + - pana la n/2 si apoi - + pana la n
impare: ++- si ramai cu o secventa para unde aplici patternul de la pare :D


Titlul: Răspuns: Sume (problema semne)
Scris de: MciprianM din Iulie 26, 2011, 21:39:03
Sa nu uiti dupa ce gasesti un pattern cu back - sa il demonstrezi adevarat pt cazul general  :-'