<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=2106_-_Armonica</id>
	<title>2106 - Armonica - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=2106_-_Armonica"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2106_-_Armonica&amp;action=history"/>
	<updated>2026-05-02T01:23:00Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2106_-_Armonica&amp;diff=8622&amp;oldid=prev</id>
		<title>Zmicala Narcis: Pagină nouă: Spunem că trei numere &#039;&#039;&#039;a b c&#039;&#039;&#039; sunt în progresie armonică dacă &#039;&#039;&#039;b&#039;&#039;&#039; este media armonică a numerelor &#039;&#039;&#039;a&#039;&#039;&#039; și &#039;&#039;&#039;c&#039;&#039;&#039;, adică &#039;&#039;&#039;b=2/1a+1c=2⋅a⋅c/a+c&#039;&#039;&#039; == Cerința == Cunoscând un număr natural &#039;&#039;&#039;b&#039;&#039;&#039; să se determine toate perechile de numere naturale &#039;&#039;&#039;(a,c)&#039;&#039;&#039; pentru care &#039;&#039;&#039;a b c&#039;&#039;&#039; sunt în progresie armonică. == Date de intrare == Fișierul de intrare &#039;&#039;&#039;armonicain.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;b&#039;&#039;&#039;. == Date de ieșire == Fișierul de...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2106_-_Armonica&amp;diff=8622&amp;oldid=prev"/>
		<updated>2023-12-28T19:35:14Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: Spunem că trei numere &amp;#039;&amp;#039;&amp;#039;a b c&amp;#039;&amp;#039;&amp;#039; sunt în progresie armonică dacă &amp;#039;&amp;#039;&amp;#039;b&amp;#039;&amp;#039;&amp;#039; este media armonică a numerelor &amp;#039;&amp;#039;&amp;#039;a&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;c&amp;#039;&amp;#039;&amp;#039;, adică &amp;#039;&amp;#039;&amp;#039;b=2/1a+1c=2⋅a⋅c/a+c&amp;#039;&amp;#039;&amp;#039; == Cerința == Cunoscând un număr natural &amp;#039;&amp;#039;&amp;#039;b&amp;#039;&amp;#039;&amp;#039; să se determine toate perechile de numere naturale &amp;#039;&amp;#039;&amp;#039;(a,c)&amp;#039;&amp;#039;&amp;#039; pentru care &amp;#039;&amp;#039;&amp;#039;a b c&amp;#039;&amp;#039;&amp;#039; sunt în progresie armonică. == Date de intrare == Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;armonicain.txt&amp;#039;&amp;#039;&amp;#039; conține pe prima linie numărul &amp;#039;&amp;#039;&amp;#039;b&amp;#039;&amp;#039;&amp;#039;. == Date de ieșire == Fișierul de...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Spunem că trei numere &amp;#039;&amp;#039;&amp;#039;a b c&amp;#039;&amp;#039;&amp;#039; sunt în progresie armonică dacă &amp;#039;&amp;#039;&amp;#039;b&amp;#039;&amp;#039;&amp;#039; este media armonică a numerelor &amp;#039;&amp;#039;&amp;#039;a&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;c&amp;#039;&amp;#039;&amp;#039;, adică&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;b=2/1a+1c=2⋅a⋅c/a+c&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Cunoscând un număr natural &amp;#039;&amp;#039;&amp;#039;b&amp;#039;&amp;#039;&amp;#039; să se determine toate perechile de numere naturale &amp;#039;&amp;#039;&amp;#039;(a,c)&amp;#039;&amp;#039;&amp;#039; pentru care &amp;#039;&amp;#039;&amp;#039;a b c&amp;#039;&amp;#039;&amp;#039; sunt în progresie armonică.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;armonicain.txt&amp;#039;&amp;#039;&amp;#039; conține pe prima linie numărul &amp;#039;&amp;#039;&amp;#039;b&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &amp;#039;&amp;#039;&amp;#039;armonicaout.txt&amp;#039;&amp;#039;&amp;#039; va conține pe prima linie numărul &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;, reprezentând numărul de perechi de numere naturale &amp;#039;&amp;#039;&amp;#039;(a,c)&amp;#039;&amp;#039;&amp;#039; pentru care &amp;#039;&amp;#039;&amp;#039;b&amp;#039;&amp;#039;&amp;#039; este media armonică. Pe următoarele linii se vor afișa perechile de numere cerute. Astfel fiecare dintre următoarele &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; linii vor conține câte două numere &amp;#039;&amp;#039;&amp;#039;a&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;c&amp;#039;&amp;#039;&amp;#039; separate printr-un spațiu cu semnificația că &amp;#039;&amp;#039;&amp;#039;b&amp;#039;&amp;#039;&amp;#039; este medie armonică a numerelor &amp;#039;&amp;#039;&amp;#039;a&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;c&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;1 ≤ b ≤ 1 000 000 000&amp;#039;&amp;#039;&amp;#039;;&lt;br /&gt;
* Pentru teste în valoare de 40 de puncte avem &amp;#039;&amp;#039;&amp;#039;b ≤ 1 000 000&amp;#039;&amp;#039;&amp;#039;;&lt;br /&gt;
* Perechile de numere din fișierul de ieșire pot fi afișate în orice ordine;&lt;br /&gt;
* Dacă &amp;#039;&amp;#039;&amp;#039;b&amp;#039;&amp;#039;&amp;#039; este medie armonică între două numere diferite &amp;#039;&amp;#039;&amp;#039;a&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;c&amp;#039;&amp;#039;&amp;#039; atunci perechile &amp;#039;&amp;#039;&amp;#039;(a,b)&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;(c,a)&amp;#039;&amp;#039;&amp;#039; sunt considerate soluții distincte.&lt;br /&gt;
* În concurs s-au acordat 10 puncte din oficiu. Pe site se acordă 10 puncte pentru exemplu.&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; armonicain.txt&lt;br /&gt;
: 3&lt;br /&gt;
; armonicaout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 3&lt;br /&gt;
: 3 3&lt;br /&gt;
: 2 6&lt;br /&gt;
: 6 2&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Numărul &amp;#039;&amp;#039;&amp;#039;3&amp;#039;&amp;#039;&amp;#039; este medie armonică a numerelor &amp;#039;&amp;#039;&amp;#039;3&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;3&amp;#039;&amp;#039;&amp;#039;. Avem progresia armonică &amp;#039;&amp;#039;&amp;#039;(3,3,3)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Numărul &amp;#039;&amp;#039;&amp;#039;3&amp;#039;&amp;#039;&amp;#039; este medie armonică a numerelor &amp;#039;&amp;#039;&amp;#039;2&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;6&amp;#039;&amp;#039;&amp;#039;. Avem progresiile armonice &amp;#039;&amp;#039;&amp;#039;(2,3,6)&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;(6,3,2)&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; armonicain.txt&lt;br /&gt;
: 1000000001&lt;br /&gt;
; armonicaout.txt&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
# 2106 - Armonica&lt;br /&gt;
def validare(valoaree_b):           # functia de validare a datelor de intrare&lt;br /&gt;
    if valoaree_b &amp;lt; 1 or valoaree_b &amp;gt; 1000000000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    fisier_iesire.write(&amp;quot;Datele introduse corespund restrictiilor impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def progresie_armonica(valoaree_b):                     # functia de rezolvare&lt;br /&gt;
    rezultat = []&lt;br /&gt;
    for valoaree_a in range(1, valoaree_b + 1):&lt;br /&gt;
        valoaree_c = (valoaree_a * valoaree_b) / (2 * valoaree_a - valoaree_b)&lt;br /&gt;
        if valoaree_c.is_integer() and valoaree_c &amp;gt;= valoaree_a:&lt;br /&gt;
            rezultat.append((valoaree_a, int(valoaree_c)))&lt;br /&gt;
            if valoaree_a != valoaree_c:  # Daca a si c sunt diferite, adaugam si perechea (c, a)&lt;br /&gt;
                rezultat.append((int(valoaree_c), valoaree_a))&lt;br /&gt;
    return rezultat&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;#039;__main__&amp;#039;:&lt;br /&gt;
    fisier_intrare = open(&amp;quot;armonicain.txt&amp;quot;, &amp;quot;r&amp;quot;)         # declararea fisierelor&lt;br /&gt;
    fisier_iesire = open(&amp;quot;armonicaout.txt&amp;quot;, &amp;quot;w&amp;quot;)       # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    # din cauza datelor de intrare pot aparea 2 tipuri de erori, valueError sau IndexError pe care le tratam&lt;br /&gt;
    try:&lt;br /&gt;
        valoare_b = int(fisier_intrare.readline())      # citirea datelor de intrare&lt;br /&gt;
&lt;br /&gt;
        validare(valoare_b)                 # apelul functiei de validare&lt;br /&gt;
        rezultate = progresie_armonica(valoare_b)  # apelul functiei de rezolvare&lt;br /&gt;
        rezultate.sort(key=lambda x: x[0] + x[1])  # Sortam solutiile in functie de suma a + c&lt;br /&gt;
        fisier_iesire.write(f&amp;quot;{len(rezultate)}\n&amp;quot;)&lt;br /&gt;
        for valoare_a, valoare_c in rezultate:&lt;br /&gt;
            fisier_iesire.write(f&amp;quot;{valoare_a} {valoare_c}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele introduse nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
</feed>