<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.universitas.ro/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Gabii</id>
	<title>Bitnami MediaWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Gabii"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/wiki/Special:Contributions/Gabii"/>
	<updated>2026-05-01T14:51:27Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0091_-_Masini&amp;diff=7726</id>
		<title>0091 - Masini</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0091_-_Masini&amp;diff=7726"/>
		<updated>2023-12-10T10:40:38Z</updated>

		<summary type="html">&lt;p&gt;Gabii: am modificat la ex 2 masiniOUT.txt in loc de consola&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunț ==&lt;br /&gt;
În curtea unui atelier de reparaţii auto, sunt &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; maşini care trebuie sa fie reparate. Deoarece nu sunt suficienţi mecanici, în fiecare moment de timp se poate lucra doar la o singură maşină.&lt;br /&gt;
&lt;br /&gt;
= Cerinţa =&lt;br /&gt;
Cunoscând timpul necesar pentru repararea fiecărei maşini, scrieţi un program care calculează numărul maxim de maşini care pot fi reparate într-un interval de timp &amp;lt;code&amp;gt;T&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Pe prima linie a fişierului &amp;lt;code&amp;gt;masiniIN.txt&amp;lt;/code&amp;gt; se găsesc două numere naturale &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;T&amp;lt;/code&amp;gt; separate printr-un singur spaţiu, reprezentând numărul de maşini din curtea atelierului auto şi timpul total în care se va lucra.&lt;br /&gt;
&lt;br /&gt;
Pe linia a doua, separate prin câte un spaţiu, se găsesc &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere naturale &amp;lt;code&amp;gt;t1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;t2&amp;lt;/code&amp;gt;, …, &amp;lt;code&amp;gt;tn&amp;lt;/code&amp;gt;, reprezentând timpii necesari pentru repararea fiecărei maşini.&lt;br /&gt;
&lt;br /&gt;
= Date de ieşire =&lt;br /&gt;
Pe prima linie a fişierului &amp;lt;code&amp;gt;masiniOUT.txt&amp;lt;/code&amp;gt;se va găsi un număr natural &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;, reprezentând numărul maxim de maşini care pot fi reparate.&lt;br /&gt;
&lt;br /&gt;
= Restricţii şi precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 &amp;lt; n, T &amp;lt;= 1000&amp;lt;/code&amp;gt;&lt;br /&gt;
* numerele de pe a doua linie a fişierului de intrare vor fi mai mici sau egale cu &amp;lt;code&amp;gt;100&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
&amp;lt;code&amp;gt;masiniIN.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 5 10&lt;br /&gt;
 6 2 4 8 2 &lt;br /&gt;
&amp;lt;code&amp;gt;masiniOUT.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 3&lt;br /&gt;
&lt;br /&gt;
= Exemplul 2 =&lt;br /&gt;
&amp;lt;code&amp;gt;masiniIN.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 5 10000&lt;br /&gt;
 6 2 4 8 2 &lt;br /&gt;
&amp;lt;code&amp;gt;masiniOUT.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 Eroare: Nu corespunde restricțiilor   &lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
def numar_maxim_masini(n, T, timp_reparare):&lt;br /&gt;
    timp_reparare.sort()&lt;br /&gt;
&lt;br /&gt;
    masini_reparate = 0&lt;br /&gt;
    timp_total = 0&lt;br /&gt;
&lt;br /&gt;
    for timp in timp_reparare:&lt;br /&gt;
        if timp_total + timp &amp;lt;= T:&lt;br /&gt;
            masini_reparate += 1&lt;br /&gt;
            timp_total += timp&lt;br /&gt;
        else:&lt;br /&gt;
            break&lt;br /&gt;
&lt;br /&gt;
    return masini_reparate&lt;br /&gt;
&lt;br /&gt;
def citeste_date_intrare(nume_fisier):&lt;br /&gt;
    if not os.path.exists(nume_fisier):&lt;br /&gt;
        raise FileNotFoundError(f&amp;quot;Fișierul {nume_fisier} nu a fost găsit.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    with open(nume_fisier, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        n, T = map(int, f.readline().split())&lt;br /&gt;
&lt;br /&gt;
        if not (1 &amp;lt;= n &amp;lt;= 1000 and 1 &amp;lt;= T &amp;lt;= 1000):&lt;br /&gt;
            raise ValueError(&amp;quot;Nu corespunde restricțiilor&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        timp_reparare = list(map(int, f.readline().split()))&lt;br /&gt;
        if any(timp &amp;gt; 100 for timp in timp_reparare):&lt;br /&gt;
            raise ValueError(&amp;quot;Nu corespunde restricțiilor&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    return n, T, timp_reparare&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    n, T, timp_reparare = citeste_date_intrare(&amp;quot;masiniIN.txt&amp;quot;)&lt;br /&gt;
except FileNotFoundError as e:&lt;br /&gt;
    print(f&amp;quot;Eroare: {str(e)}&amp;quot;)&lt;br /&gt;
    exit(1)&lt;br /&gt;
except ValueError as e:&lt;br /&gt;
    with open(&amp;quot;masiniOUT.txt&amp;quot;, &amp;quot;w&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as f_out:&lt;br /&gt;
        f_out.write(f&amp;quot;Eroare: {str(e)}&amp;quot;)&lt;br /&gt;
    exit(1)&lt;br /&gt;
&lt;br /&gt;
rezultat = numar_maxim_masini(n, T, timp_reparare)&lt;br /&gt;
&lt;br /&gt;
# Scriere rezultat în fișierul masiniOUT.txt&lt;br /&gt;
with open(&amp;quot;masiniOUT.txt&amp;quot;, &amp;quot;w&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as f_out:&lt;br /&gt;
    f_out.write(str(rezultat))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0091_-_Masini&amp;diff=7725</id>
		<title>0091 - Masini</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0091_-_Masini&amp;diff=7725"/>
		<updated>2023-12-09T22:29:06Z</updated>

		<summary type="html">&lt;p&gt;Gabii: am modificat sa apara in masiniOUT.txt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunț ==&lt;br /&gt;
În curtea unui atelier de reparaţii auto, sunt &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; maşini care trebuie sa fie reparate. Deoarece nu sunt suficienţi mecanici, în fiecare moment de timp se poate lucra doar la o singură maşină.&lt;br /&gt;
&lt;br /&gt;
= Cerinţa =&lt;br /&gt;
Cunoscând timpul necesar pentru repararea fiecărei maşini, scrieţi un program care calculează numărul maxim de maşini care pot fi reparate într-un interval de timp &amp;lt;code&amp;gt;T&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Pe prima linie a fişierului &amp;lt;code&amp;gt;masiniIN.txt&amp;lt;/code&amp;gt; se găsesc două numere naturale &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;T&amp;lt;/code&amp;gt; separate printr-un singur spaţiu, reprezentând numărul de maşini din curtea atelierului auto şi timpul total în care se va lucra.&lt;br /&gt;
&lt;br /&gt;
Pe linia a doua, separate prin câte un spaţiu, se găsesc &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere naturale &amp;lt;code&amp;gt;t1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;t2&amp;lt;/code&amp;gt;, …, &amp;lt;code&amp;gt;tn&amp;lt;/code&amp;gt;, reprezentând timpii necesari pentru repararea fiecărei maşini.&lt;br /&gt;
&lt;br /&gt;
= Date de ieşire =&lt;br /&gt;
Pe prima linie a fişierului &amp;lt;code&amp;gt;masiniOUT.txt&amp;lt;/code&amp;gt;se va găsi un număr natural &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;, reprezentând numărul maxim de maşini care pot fi reparate.&lt;br /&gt;
&lt;br /&gt;
= Restricţii şi precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 &amp;lt; n, T &amp;lt;= 1000&amp;lt;/code&amp;gt;&lt;br /&gt;
* numerele de pe a doua linie a fişierului de intrare vor fi mai mici sau egale cu &amp;lt;code&amp;gt;100&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
&amp;lt;code&amp;gt;masiniIN.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 5 10&lt;br /&gt;
 6 2 4 8 2 &lt;br /&gt;
&amp;lt;code&amp;gt;masiniOUT.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 3&lt;br /&gt;
&lt;br /&gt;
= Exemplul 2 =&lt;br /&gt;
&amp;lt;code&amp;gt;masiniIN.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 5 10000&lt;br /&gt;
 6 2 4 8 2 &lt;br /&gt;
consola&lt;br /&gt;
 Eroare: Nu corespunde restricțiilor   &lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
def numar_maxim_masini(n, T, timp_reparare):&lt;br /&gt;
    timp_reparare.sort()&lt;br /&gt;
&lt;br /&gt;
    masini_reparate = 0&lt;br /&gt;
    timp_total = 0&lt;br /&gt;
&lt;br /&gt;
    for timp in timp_reparare:&lt;br /&gt;
        if timp_total + timp &amp;lt;= T:&lt;br /&gt;
            masini_reparate += 1&lt;br /&gt;
            timp_total += timp&lt;br /&gt;
        else:&lt;br /&gt;
            break&lt;br /&gt;
&lt;br /&gt;
    return masini_reparate&lt;br /&gt;
&lt;br /&gt;
def citeste_date_intrare(nume_fisier):&lt;br /&gt;
    if not os.path.exists(nume_fisier):&lt;br /&gt;
        raise FileNotFoundError(f&amp;quot;Fișierul {nume_fisier} nu a fost găsit.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    with open(nume_fisier, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        n, T = map(int, f.readline().split())&lt;br /&gt;
&lt;br /&gt;
        if not (1 &amp;lt;= n &amp;lt;= 1000 and 1 &amp;lt;= T &amp;lt;= 1000):&lt;br /&gt;
            raise ValueError(&amp;quot;Nu corespunde restricțiilor&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        timp_reparare = list(map(int, f.readline().split()))&lt;br /&gt;
        if any(timp &amp;gt; 100 for timp in timp_reparare):&lt;br /&gt;
            raise ValueError(&amp;quot;Nu corespunde restricțiilor&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    return n, T, timp_reparare&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    n, T, timp_reparare = citeste_date_intrare(&amp;quot;masiniIN.txt&amp;quot;)&lt;br /&gt;
except FileNotFoundError as e:&lt;br /&gt;
    print(f&amp;quot;Eroare: {str(e)}&amp;quot;)&lt;br /&gt;
    exit(1)&lt;br /&gt;
except ValueError as e:&lt;br /&gt;
    with open(&amp;quot;masiniOUT.txt&amp;quot;, &amp;quot;w&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as f_out:&lt;br /&gt;
        f_out.write(f&amp;quot;Eroare: {str(e)}&amp;quot;)&lt;br /&gt;
    exit(1)&lt;br /&gt;
&lt;br /&gt;
rezultat = numar_maxim_masini(n, T, timp_reparare)&lt;br /&gt;
&lt;br /&gt;
# Scriere rezultat în fișierul masiniOUT.txt&lt;br /&gt;
with open(&amp;quot;masiniOUT.txt&amp;quot;, &amp;quot;w&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as f_out:&lt;br /&gt;
    f_out.write(str(rezultat))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3152_-_combinari2&amp;diff=7724</id>
		<title>3152 - combinari2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3152_-_combinari2&amp;diff=7724"/>
		<updated>2023-12-09T22:18:58Z</updated>

		<summary type="html">&lt;p&gt;Gabii: am adaugat explicatia&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Cerința =&lt;br /&gt;
Se citesc două numere naturale &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;. Afișați în ordine lexicografică toate submulțimile cu &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; elemente ale mulțimii &amp;lt;code&amp;gt;{1, 2, ..., n}&amp;lt;/code&amp;gt; în care nu există două elemente pare alăturate.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Programul citește de la tastatură numerele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Programul va afișa pe ecran submulțimile cerute, câte una pe fiecare rand și având elementele separate prin câte un spaţiu. În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul &amp;quot;Nu corespunde restricțiilor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ m &amp;lt; n ≤ 20&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
Intrare&lt;br /&gt;
 5 3&lt;br /&gt;
Ieșire&lt;br /&gt;
 1 2 3 &lt;br /&gt;
 1 2 5 &lt;br /&gt;
 1 3 4 &lt;br /&gt;
 1 3 5 &lt;br /&gt;
 1 4 5 &lt;br /&gt;
 2 3 4 &lt;br /&gt;
 2 3 5 &lt;br /&gt;
 3 4 5 &lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Numrele &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; nu apar pe poziții alăturate.&lt;br /&gt;
&lt;br /&gt;
= Exemplul 2 =&lt;br /&gt;
Intrare&lt;br /&gt;
 22 17&lt;br /&gt;
consola&lt;br /&gt;
 Nu corespunde restricțiilor&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def este_input_valid(n, m):&lt;br /&gt;
    return 1 &amp;lt;= m &amp;lt; n &amp;lt;= 20&lt;br /&gt;
&lt;br /&gt;
def este_submultime_valida(submultime):&lt;br /&gt;
    for i in range(len(submultime) - 1):&lt;br /&gt;
        if submultime[i] % 2 == 0 and submultime[i + 1] % 2 == 0:&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def genereaza_submultimi(n, m, submultime_curenta, index):&lt;br /&gt;
    if len(submultime_curenta) == m:&lt;br /&gt;
        if este_submultime_valida(submultime_curenta):&lt;br /&gt;
            print(*submultime_curenta)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    if index &amp;gt; n:&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    # Include elementul la index în submulțime&lt;br /&gt;
    genereaza_submultimi(n, m, submultime_curenta + [index], index + 1)&lt;br /&gt;
&lt;br /&gt;
    # Sări peste elementul la index&lt;br /&gt;
    genereaza_submultimi(n, m, submultime_curenta, index + 1)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n, m = map(int, input(&amp;quot;Introduceți valorile pentru n și m (separate prin spațiu): &amp;quot;).split())&lt;br /&gt;
&lt;br /&gt;
    if not este_input_valid(n, m):&lt;br /&gt;
        print(&amp;quot;Nu corespunde restricțiilor&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(f&amp;quot;Submulțimile cu {m} elemente ale mulțimii {{1, 2, ..., {n}}} în care nu există două elemente pare alăturate sunt:&amp;quot;)&lt;br /&gt;
        genereaza_submultimi(n, m, [], 1)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0317_-_SumMax&amp;diff=7723</id>
		<title>0317 - SumMax</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0317_-_SumMax&amp;diff=7723"/>
		<updated>2023-12-09T22:18:11Z</updated>

		<summary type="html">&lt;p&gt;Gabii: am adaugat explicatia&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cerinţa =&lt;br /&gt;
Se dă o matrice pătratică cu &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; lini şi &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; coloane şi elemente numere naturale distincte. Determinaţi cea mai mare sumă a &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; elemente din matrice, cu proprietatea că oricare două elemente se află pe linii şi coloane distincte.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fişierul de intrare &amp;lt;code&amp;gt;summaxIN.txt&amp;lt;/code&amp;gt; conţine pe prima linie numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, iar pe următoarele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; linii câte &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere naturale, separate prin spaţii, reprezentând elementele matricei.&lt;br /&gt;
&lt;br /&gt;
= Date de ieşire =&lt;br /&gt;
Fişierul de ieşire &amp;lt;code&amp;gt;summaxOUT.txt&amp;lt;/code&amp;gt; va conţine pe prima linie numărul &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt;, reprezentând suma maximă determinată. În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul &amp;quot;Nu corespunde restricțiilor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= Restricţii şi precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 10&amp;lt;/code&amp;gt;&lt;br /&gt;
* elementele matricei vor avea cel mult &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; cifre&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
&amp;lt;code&amp;gt;summaxIN.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 4&lt;br /&gt;
 12 16 5 4&lt;br /&gt;
 11 14 6 7&lt;br /&gt;
 8 2 3 17&lt;br /&gt;
 10 9 13 15&lt;br /&gt;
&amp;lt;code&amp;gt;summaxOUT.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 57&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
&amp;lt;code&amp;gt;57=16+11+17+13&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Exemplul 2 =&lt;br /&gt;
&amp;lt;code&amp;gt;summaxIN.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 100000&lt;br /&gt;
consola&lt;br /&gt;
 Nu corespunde restricțiilor&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def citeste_matrice(file_path):&lt;br /&gt;
    with open(file_path, &#039;r&#039;, encoding=&#039;utf-8&#039;) as file:&lt;br /&gt;
        n = int(file.readline().strip())&lt;br /&gt;
        matrice = [list(map(int, file.readline().split())) for _ in range(n)]&lt;br /&gt;
    return n, matrice&lt;br /&gt;
&lt;br /&gt;
def scrie_rezultat(file_path, rezultat):&lt;br /&gt;
    with open(file_path, &#039;w&#039;, encoding=&#039;utf-8&#039;) as file:&lt;br /&gt;
        file.write(str(rezultat))&lt;br /&gt;
&lt;br /&gt;
def verifica_restrictii(n, matrice):&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 10):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    for linie in matrice:&lt;br /&gt;
        for element in linie:&lt;br /&gt;
            if not (0 &amp;lt;= element &amp;lt;= 9999):&lt;br /&gt;
                return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def gaseste_suma_maxima(n, matrice):&lt;br /&gt;
    elemente_sortate = sorted([(matrice[i][j], i, j) for i in range(n) for j in range(n)], reverse=True)&lt;br /&gt;
&lt;br /&gt;
    linii_selectate = set()&lt;br /&gt;
    coloane_selectate = set()&lt;br /&gt;
&lt;br /&gt;
    suma_maxima = 0&lt;br /&gt;
&lt;br /&gt;
    for element, i, j in elemente_sortate:&lt;br /&gt;
        if i not in linii_selectate and j not in coloane_selectate:&lt;br /&gt;
            suma_maxima += element&lt;br /&gt;
            linii_selectate.add(i)&lt;br /&gt;
            coloane_selectate.add(j)&lt;br /&gt;
&lt;br /&gt;
    return suma_maxima&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    fisier_intrare = &amp;quot;summaxIN.txt&amp;quot;&lt;br /&gt;
    fisier_iesire = &amp;quot;summaxOUT.txt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    n, matrice = citeste_matrice(fisier_intrare)&lt;br /&gt;
&lt;br /&gt;
    if verifica_restrictii(n, matrice):&lt;br /&gt;
        rezultat = gaseste_suma_maxima(n, matrice)&lt;br /&gt;
        if rezultat &amp;gt; 0:&lt;br /&gt;
            scrie_rezultat(fisier_iesire, rezultat)&lt;br /&gt;
        else:&lt;br /&gt;
            scrie_rezultat( &amp;quot;Nu corespunde restrictiilor&amp;quot;.encode(&#039;utf-8&#039;))&lt;br /&gt;
    else:&lt;br /&gt;
        scrie_rezultat(fisier_iesire, &amp;quot;Nu corespunde restricțiilor&amp;quot;.encode(&#039;utf-8&#039;).decode(&#039;utf-8&#039;))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2646_-_impartire&amp;diff=7722</id>
		<title>2646 - impartire</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2646_-_impartire&amp;diff=7722"/>
		<updated>2023-12-09T22:17:20Z</updated>

		<summary type="html">&lt;p&gt;Gabii: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cerința =&lt;br /&gt;
Se dau &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere naturale, unde &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; este un număr par. Se grupează cele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere în perechi şi pentru fiecare pereche de numere se află restul împărţirii unui număr din pereche la celălalt. Se cere să se afle valoarea minimă a sumei acestor resturi.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Programul citește de la tastatură numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, iar apoi cele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere naturale, separate prin spații.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Programul va afișa pe ecran suma minimă a resturilor. În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul &amp;quot;Nu corespunde restricțiilor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;2 ≤ n ≤ 18&amp;lt;/code&amp;gt;&lt;br /&gt;
* cele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere citite vor fi mai mici decât &amp;lt;code&amp;gt;1.000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
Intrare&lt;br /&gt;
 4&lt;br /&gt;
 6 5 3 4&lt;br /&gt;
Ieșire&lt;br /&gt;
 1&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
Intrare&lt;br /&gt;
 20&lt;br /&gt;
consola&lt;br /&gt;
 Numărul n nu corespunde restricțiilor.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def verificare_restrictii(n, numbers):&lt;br /&gt;
    # Verifică dacă n este un număr par și se află în intervalul [2, 18]&lt;br /&gt;
    if n % 2 != 0 or n &amp;lt; 2 or n &amp;gt; 18:&lt;br /&gt;
        return False, &amp;quot;Numărul n nu corespunde restricțiilor.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # Verifică restricțiile pentru numerele naturale&lt;br /&gt;
    for num in numbers:&lt;br /&gt;
        if num &amp;gt;= 1000:&lt;br /&gt;
            return False, &amp;quot;Numerele nu corespund restricțiilor.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    return True, &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
def calculeaza_suma_resturilor(permutare):&lt;br /&gt;
    return sum(permutare[i] % permutare[i+1] for i in range(0, len(permutare), 2))&lt;br /&gt;
&lt;br /&gt;
def backtracking(permutare, vizitate, n, numbers, suma_minima):&lt;br /&gt;
    if len(permutare) == n:&lt;br /&gt;
        suma = calculeaza_suma_resturilor(permutare)&lt;br /&gt;
        suma_minima[0] = min(suma_minima[0], suma)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        if not vizitate[i]:&lt;br /&gt;
            permutare.append(numbers[i])&lt;br /&gt;
            vizitate[i] = True&lt;br /&gt;
&lt;br /&gt;
            backtracking(permutare, vizitate, n, numbers, suma_minima)&lt;br /&gt;
&lt;br /&gt;
            permutare.pop()&lt;br /&gt;
            vizitate[i] = False&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    # Citire număr n de la tastatură&lt;br /&gt;
    n = int(input(&amp;quot;Introduceți numărul n: &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    # Verificare restricții&lt;br /&gt;
    valid, mesaj_eroare = verificare_restrictii(n, [])&lt;br /&gt;
    if not valid:&lt;br /&gt;
        print(&amp;quot;Eroare:&amp;quot;, mesaj_eroare)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    # Citire cele n numere naturale de la tastatură&lt;br /&gt;
    numbers = list(map(int, input(&amp;quot;Introduceți cele {} numere naturale separate prin spații: &amp;quot;.format(n)).split()))&lt;br /&gt;
&lt;br /&gt;
    # Verificare restricții pentru numerele introduse&lt;br /&gt;
    valid, mesaj_eroare = verificare_restrictii(n, numbers)&lt;br /&gt;
    if not valid:&lt;br /&gt;
        print(&amp;quot;Eroare:&amp;quot;, mesaj_eroare)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    permutare = []&lt;br /&gt;
    vizitate = [False] * n&lt;br /&gt;
    suma_minima = [float(&#039;inf&#039;)]&lt;br /&gt;
&lt;br /&gt;
    backtracking(permutare, vizitate, n, numbers, suma_minima)&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;Suma minimă a resturilor este:&amp;quot;, suma_minima[0])&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2646_-_impartire&amp;diff=7721</id>
		<title>2646 - impartire</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2646_-_impartire&amp;diff=7721"/>
		<updated>2023-12-09T22:17:03Z</updated>

		<summary type="html">&lt;p&gt;Gabii: am modificat codul&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cerința =&lt;br /&gt;
Se dau &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere naturale, unde &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; este un număr par. Se grupează cele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere în perechi şi pentru fiecare pereche de numere se află restul împărţirii unui număr din pereche la celălalt. Se cere să se afle valoarea minimă a sumei acestor resturi.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Programul citește de la tastatură numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, iar apoi cele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere naturale, separate prin spații.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Programul va afișa pe ecran suma minimă a resturilor. În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul &amp;quot;Nu corespunde restricțiilor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;2 ≤ n ≤ 18&amp;lt;/code&amp;gt;&lt;br /&gt;
* cele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere citite vor fi mai mici decât &amp;lt;code&amp;gt;1.000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
Intrare&lt;br /&gt;
 4&lt;br /&gt;
 6 5 3 4&lt;br /&gt;
Ieșire&lt;br /&gt;
 1&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
Intrare&lt;br /&gt;
 20&lt;br /&gt;
consola&lt;br /&gt;
 Nu n nu corespunde restricțiilor.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def verificare_restrictii(n, numbers):&lt;br /&gt;
    # Verifică dacă n este un număr par și se află în intervalul [2, 18]&lt;br /&gt;
    if n % 2 != 0 or n &amp;lt; 2 or n &amp;gt; 18:&lt;br /&gt;
        return False, &amp;quot;Numărul n nu corespunde restricțiilor.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # Verifică restricțiile pentru numerele naturale&lt;br /&gt;
    for num in numbers:&lt;br /&gt;
        if num &amp;gt;= 1000:&lt;br /&gt;
            return False, &amp;quot;Numerele nu corespund restricțiilor.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    return True, &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
def calculeaza_suma_resturilor(permutare):&lt;br /&gt;
    return sum(permutare[i] % permutare[i+1] for i in range(0, len(permutare), 2))&lt;br /&gt;
&lt;br /&gt;
def backtracking(permutare, vizitate, n, numbers, suma_minima):&lt;br /&gt;
    if len(permutare) == n:&lt;br /&gt;
        suma = calculeaza_suma_resturilor(permutare)&lt;br /&gt;
        suma_minima[0] = min(suma_minima[0], suma)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        if not vizitate[i]:&lt;br /&gt;
            permutare.append(numbers[i])&lt;br /&gt;
            vizitate[i] = True&lt;br /&gt;
&lt;br /&gt;
            backtracking(permutare, vizitate, n, numbers, suma_minima)&lt;br /&gt;
&lt;br /&gt;
            permutare.pop()&lt;br /&gt;
            vizitate[i] = False&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    # Citire număr n de la tastatură&lt;br /&gt;
    n = int(input(&amp;quot;Introduceți numărul n: &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    # Verificare restricții&lt;br /&gt;
    valid, mesaj_eroare = verificare_restrictii(n, [])&lt;br /&gt;
    if not valid:&lt;br /&gt;
        print(&amp;quot;Eroare:&amp;quot;, mesaj_eroare)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    # Citire cele n numere naturale de la tastatură&lt;br /&gt;
    numbers = list(map(int, input(&amp;quot;Introduceți cele {} numere naturale separate prin spații: &amp;quot;.format(n)).split()))&lt;br /&gt;
&lt;br /&gt;
    # Verificare restricții pentru numerele introduse&lt;br /&gt;
    valid, mesaj_eroare = verificare_restrictii(n, numbers)&lt;br /&gt;
    if not valid:&lt;br /&gt;
        print(&amp;quot;Eroare:&amp;quot;, mesaj_eroare)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    permutare = []&lt;br /&gt;
    vizitate = [False] * n&lt;br /&gt;
    suma_minima = [float(&#039;inf&#039;)]&lt;br /&gt;
&lt;br /&gt;
    backtracking(permutare, vizitate, n, numbers, suma_minima)&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;Suma minimă a resturilor este:&amp;quot;, suma_minima[0])&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3923_-_back_abc2&amp;diff=7720</id>
		<title>3923 - back abc2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3923_-_back_abc2&amp;diff=7720"/>
		<updated>2023-12-09T21:46:27Z</updated>

		<summary type="html">&lt;p&gt;Gabii: am adaugat explicatia&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cerința =&lt;br /&gt;
Se citesc două numere naturale &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;. Afișați în ordine lexicografică toate cuvintele care sunt formate din &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; litere distincte folosind primele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; litere mari din alfabet.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Programul citește de la tastatură numerele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;, separate prin spații.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Programul va afișa pe ecran pe linii separate cuvintele cerute. În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul &amp;quot;Nu corespunde restricțiilor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;0 ≤ n ≤ 26&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;0 ≤ m ≤ 5&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;m ≤ n&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
Intrare&lt;br /&gt;
 4 3&lt;br /&gt;
Ieșire&lt;br /&gt;
 ABC&lt;br /&gt;
 ABD&lt;br /&gt;
 ACB&lt;br /&gt;
 ACD&lt;br /&gt;
 ADB&lt;br /&gt;
 ADC&lt;br /&gt;
 BAC&lt;br /&gt;
 BAD&lt;br /&gt;
 BCA&lt;br /&gt;
 BCD&lt;br /&gt;
 BDA&lt;br /&gt;
 BDC&lt;br /&gt;
 CAB&lt;br /&gt;
 CAD&lt;br /&gt;
 CBA&lt;br /&gt;
 CBD&lt;br /&gt;
 CDA&lt;br /&gt;
 CDB&lt;br /&gt;
 DAB&lt;br /&gt;
 DAC&lt;br /&gt;
 DBA&lt;br /&gt;
 DBC&lt;br /&gt;
 DCA&lt;br /&gt;
 DCB&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Primele 4 litere mari sunt {A,B,C,D} și se formează cuvinte cu 3 litere distincte.&lt;br /&gt;
&lt;br /&gt;
= Exemplul 2 =&lt;br /&gt;
Intrare&lt;br /&gt;
 4 3&lt;br /&gt;
consola&lt;br /&gt;
 Nu corespunde restricțiilor.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import itertools&lt;br /&gt;
&lt;br /&gt;
def check_restrictions(n, m):&lt;br /&gt;
    if 0 &amp;lt;= n &amp;lt;= 26 and 0 &amp;lt;= m &amp;lt;= 5 and m &amp;lt;= n:&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Nu corespunde restricțiilor.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
def generate_words(n, m):&lt;br /&gt;
    alphabet = &#039;ABCDEFGHIJKLMNOPQRSTUVWXYZ&#039;&lt;br /&gt;
    letters = alphabet[:n]&lt;br /&gt;
&lt;br /&gt;
    # Generăm toate permutările posibile de lungime m folosind literele primele n din alfabet&lt;br /&gt;
    permutations = itertools.permutations(letters, m)&lt;br /&gt;
&lt;br /&gt;
    # Afisăm cuvintele în ordine lexicografică&lt;br /&gt;
    for word in sorted(permutations):&lt;br /&gt;
        print(&#039;&#039;.join(word))&lt;br /&gt;
&lt;br /&gt;
# Citim numerele n și m de la tastatură&lt;br /&gt;
n, m = map(int, input(&amp;quot;Introduceți valorile lui n și m (separate prin spațiu): &amp;quot;).split())&lt;br /&gt;
&lt;br /&gt;
# Verificăm restricțiile folosind funcția check_restrictions&lt;br /&gt;
if check_restrictions(n, m):&lt;br /&gt;
    generate_words(n, m)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3996_-_back_abc3&amp;diff=7719</id>
		<title>3996 - back abc3</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3996_-_back_abc3&amp;diff=7719"/>
		<updated>2023-12-09T21:45:35Z</updated>

		<summary type="html">&lt;p&gt;Gabii: am adaugat explicatia&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cerința =&lt;br /&gt;
Se citește un număr natural &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;. Afișați în ordine lexicografică toate cuvintele care sunt formate din &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; litere mari, care au literele ordonate alfabetic strict crescător și în care numărul de vocale este mai mare decât numărul de consoane.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Programul citește de la tastatură numerul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Programul va afișa pe ecran pe linii separate cuvintele cerute. Cuvintele se vor afișa în ordine lexicografică. În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul &amp;quot;Nu corespunde restricțiilor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 9&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
Intrare&lt;br /&gt;
 3&lt;br /&gt;
Ieșire&lt;br /&gt;
 ABE&lt;br /&gt;
 ABI&lt;br /&gt;
 ABO&lt;br /&gt;
 ABU&lt;br /&gt;
 ACE&lt;br /&gt;
 ACI&lt;br /&gt;
 ACO&lt;br /&gt;
 ACU&lt;br /&gt;
 ADE&lt;br /&gt;
 ADI&lt;br /&gt;
 ADO&lt;br /&gt;
 ADU&lt;br /&gt;
 AEF&lt;br /&gt;
 AEG&lt;br /&gt;
 AEH&lt;br /&gt;
 AEI&lt;br /&gt;
 AEJ&lt;br /&gt;
 AEK&lt;br /&gt;
 AEL&lt;br /&gt;
 AEM&lt;br /&gt;
 AEN&lt;br /&gt;
 AEO&lt;br /&gt;
 AEP&lt;br /&gt;
 AEQ&lt;br /&gt;
 AER&lt;br /&gt;
 AES&lt;br /&gt;
 AET&lt;br /&gt;
 AEU&lt;br /&gt;
 AEV&lt;br /&gt;
 ...&lt;br /&gt;
 IUW&lt;br /&gt;
 IUX&lt;br /&gt;
 IUY&lt;br /&gt;
 IUZ&lt;br /&gt;
 JOU&lt;br /&gt;
 KOU&lt;br /&gt;
 LOU&lt;br /&gt;
 MOU&lt;br /&gt;
 NOU&lt;br /&gt;
 OPU&lt;br /&gt;
 OQU&lt;br /&gt;
 ORU&lt;br /&gt;
 OSU&lt;br /&gt;
 OTU&lt;br /&gt;
 OUV&lt;br /&gt;
 OUW&lt;br /&gt;
 OUX&lt;br /&gt;
 OUY&lt;br /&gt;
 OUZ&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Pentru n=3 se obțin 220 de cuvinte.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
Intrare&lt;br /&gt;
 10&lt;br /&gt;
consola&lt;br /&gt;
 Nu corespunde restricțiilor&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
from itertools import permutations&lt;br /&gt;
&lt;br /&gt;
def numara_vocale_consoane(cuvant):&lt;br /&gt;
    # Calculează numărul de vocale și consoane din cuvânt&lt;br /&gt;
    vocale = sum(1 for litera in cuvant if litera in &amp;quot;AEIOU&amp;quot;)&lt;br /&gt;
    consoane = len(cuvant) - vocale&lt;br /&gt;
    return vocale, consoane&lt;br /&gt;
&lt;br /&gt;
def genereaza_cuvinte(n):&lt;br /&gt;
    # Verifică restricțiile pentru n&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 9):&lt;br /&gt;
        print(&amp;quot;Nu corespunde restricțiilor&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    # Generează toate permutările de litere de lungime n cu litere mari&lt;br /&gt;
    litere = &amp;quot;ABCDEFGHIJKLMNOPQRSTUVWXYZ&amp;quot;&lt;br /&gt;
    toate_permutarile = [&#039;&#039;.join(p) for p in permutations(litere, r=n)]&lt;br /&gt;
&lt;br /&gt;
    # Filtrează permutările pentru a îndeplini condițiile&lt;br /&gt;
    cuvinte_valide = [cuvant for cuvant in toate_permutarile if cuvant == &#039;&#039;.join(sorted(cuvant)) and numara_vocale_consoane(cuvant)[0] &amp;gt; numara_vocale_consoane(cuvant)[1]]&lt;br /&gt;
&lt;br /&gt;
    # Afișează cuvintele în ordine lexicografică&lt;br /&gt;
    for cuvant_valid in sorted(cuvinte_valide):&lt;br /&gt;
        print(cuvant_valid)&lt;br /&gt;
&lt;br /&gt;
# Citirea numărului n de la tastatură&lt;br /&gt;
n = int(input(&amp;quot;Introduceți un număr natural n: &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
# Apelarea funcției cu verificare restricții și afișarea cuvintelor cerute&lt;br /&gt;
genereaza_cuvinte(n)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3922_-_back_abc1&amp;diff=7718</id>
		<title>3922 - back abc1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3922_-_back_abc1&amp;diff=7718"/>
		<updated>2023-12-09T21:44:53Z</updated>

		<summary type="html">&lt;p&gt;Gabii: am adaugat explicatia&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cerința =&lt;br /&gt;
Se citesc două numere naturale &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;. Afișați în ordine lexicografică toate cuvintele care sunt formate din &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; litere folosind primele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; litere mari din alfabet și care au literele ordonate alfabetic strict crescător.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Programul citește de la tastatură numerele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;, separate prin spații.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Programul va afișa pe ecran pe linii separate cuvintele cerute. În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul &amp;quot;Nu corespunde restricțiilor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 26&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;0 ≤ m ≤ 10&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;m ≤ n&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
Intrare&lt;br /&gt;
 5 3&lt;br /&gt;
Ieșire&lt;br /&gt;
 ABC&lt;br /&gt;
 ABD&lt;br /&gt;
 ABE&lt;br /&gt;
 ACD&lt;br /&gt;
 ACE&lt;br /&gt;
 ADE&lt;br /&gt;
 BCD&lt;br /&gt;
 BCE&lt;br /&gt;
 BDE&lt;br /&gt;
 CDE&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Primele 5 litere mari sunt {A,B,C,D,E} și se formează cuvinte cu 3 litere având literele ordonate alfabetic.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
Intrare&lt;br /&gt;
 5 7 &lt;br /&gt;
consola&lt;br /&gt;
 Nu corespunde restricțiilor&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
from itertools import combinations&lt;br /&gt;
&lt;br /&gt;
def generate_words(n, m):&lt;br /&gt;
    alphabet = &#039;ABCDEFGHIJKLMNOPQRSTUVWXYZ&#039;&lt;br /&gt;
    letters = alphabet[:n]&lt;br /&gt;
&lt;br /&gt;
    for combination in combinations(letters, m):&lt;br /&gt;
        word = &#039;&#039;.join(sorted(combination))&lt;br /&gt;
        print(word)&lt;br /&gt;
&lt;br /&gt;
def check_restrictions(n, m):&lt;br /&gt;
    if 1 &amp;lt;= n &amp;lt;= 26 and 0 &amp;lt;= m &amp;lt;= 10 and m &amp;lt;= n:&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Nu corespunde restricțiilor&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
# Citirea datelor de intrare&lt;br /&gt;
n, m = map(int, input(&amp;quot;Introduceți n și m (separate prin spații): &amp;quot;).split())&lt;br /&gt;
&lt;br /&gt;
# Verificarea restricțiilor și generarea cuvintelor&lt;br /&gt;
if check_restrictions(n, m):&lt;br /&gt;
    generate_words(n, m)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3988_-_permnk&amp;diff=7717</id>
		<title>3988 - permnk</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3988_-_permnk&amp;diff=7717"/>
		<updated>2023-12-09T21:44:15Z</updated>

		<summary type="html">&lt;p&gt;Gabii: am adaugat explicatia&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cerința =&lt;br /&gt;
Se dau numerele naturale &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; si &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;. Sa se genereze in ordine lexicografică toate permutările mulțimii &amp;lt;code&amp;gt;{1,2,...,n}&amp;lt;/code&amp;gt; cu proprietatea că diferența în modul dintre oricare două numere alăturate din permutare este de cel mult &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Programul citește de pe prima linie numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, iar de pe a doua linie numărul &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Programul va afișa pe ecran, pe câte o linie, în ordine lexicografică, permutările cerute.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ k ≤ n ≤ 9&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
Intrare&lt;br /&gt;
 4&lt;br /&gt;
 2&lt;br /&gt;
Ieșire&lt;br /&gt;
 1 2 3 4&lt;br /&gt;
 1 2 4 3&lt;br /&gt;
 1 3 2 4&lt;br /&gt;
 1 3 4 2&lt;br /&gt;
 2 1 3 4&lt;br /&gt;
 2 4 3 1&lt;br /&gt;
 3 1 2 4&lt;br /&gt;
 3 4 2 1&lt;br /&gt;
 4 2 1 3&lt;br /&gt;
 4 2 3 1&lt;br /&gt;
 4 3 1 2&lt;br /&gt;
 4 3 2 1&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Lipsesc permutările în care &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; sunt alăturate, deoarece diferența lor în modul este mai mare decât &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
Intrare&lt;br /&gt;
 5&lt;br /&gt;
 7&lt;br /&gt;
consola&lt;br /&gt;
 Restricții neîndeplinite. Asigurați-vă că &lt;br /&gt;
 1 &amp;lt;= k &amp;lt;= n &amp;lt;= 9.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def este_permutare_valida(permutare, k):&lt;br /&gt;
    for i in range(1, len(permutare)):&lt;br /&gt;
        if abs(permutare[i] - permutare[i-1]) &amp;gt; k:&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def genereaza_permutari(n, k, permutare_curenta):&lt;br /&gt;
    if len(permutare_curenta) == n:&lt;br /&gt;
        if este_permutare_valida(permutare_curenta, k):&lt;br /&gt;
            print(&amp;quot; &amp;quot;.join(map(str, permutare_curenta)))&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    for numar in range(1, n + 1):&lt;br /&gt;
        if numar not in permutare_curenta:&lt;br /&gt;
            genereaza_permutari(n, k, permutare_curenta + [numar])&lt;br /&gt;
&lt;br /&gt;
def verifica_restrictii(n, k):&lt;br /&gt;
    return 1 &amp;lt;= k &amp;lt;= n &amp;lt;= 9&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n = int(input(&amp;quot;Introduceți n: &amp;quot;))&lt;br /&gt;
    k = int(input(&amp;quot;Introduceți k: &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    if verifica_restrictii(n, k):&lt;br /&gt;
        genereaza_permutari(n, k, [])&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Restricții neîndeplinite. Asigurați-vă că 1 &amp;lt;= k &amp;lt;= n &amp;lt;= 9.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3154_-_anagrame_pfv&amp;diff=7716</id>
		<title>3154 - anagrame pfv</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3154_-_anagrame_pfv&amp;diff=7716"/>
		<updated>2023-12-09T21:43:20Z</updated>

		<summary type="html">&lt;p&gt;Gabii: am adaugat explicatia&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cerința =&lt;br /&gt;
Se citește de la tastatură un cuvânt &amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt; format din cel mult &amp;lt;code&amp;gt;11&amp;lt;/code&amp;gt; litere mici distincte. Să se genereze în ordine alfabetică și să se afișeze toate anagramele cuvântului &amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt; în care vocalele sunt puncte fixe.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Programul citește de la tastatură cuvântul &amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Programul va afișa pe ecran pe rânduri separate anagramele cuvântului citit în care vocalele rămân pe pozițiile inițiale.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* cuvântul &amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt; are cel mult &amp;lt;code&amp;gt;11&amp;lt;/code&amp;gt; caractere și este format din litere mici distincte&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
Intrare&lt;br /&gt;
 dorel&lt;br /&gt;
Ieșire&lt;br /&gt;
 doler&lt;br /&gt;
 dorel&lt;br /&gt;
 loder&lt;br /&gt;
 lored&lt;br /&gt;
 rodel&lt;br /&gt;
 roled&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Anagramele sunt afișate în ordine lexicografică, iar literele &amp;lt;code&amp;gt;o&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;e&amp;lt;/code&amp;gt; rămân pe pozițiile inițiale.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
Intrare&lt;br /&gt;
 guadalahara&lt;br /&gt;
consola&lt;br /&gt;
 Cuvântul trebuie să aibă cel mult 11 litere distincte.&lt;br /&gt;
&lt;br /&gt;
== Rezultat ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
from itertools import permutations&lt;br /&gt;
&lt;br /&gt;
def este_vocala(caracter):&lt;br /&gt;
    return caracter in &amp;quot;aeiou&amp;quot;&lt;br /&gt;
&lt;br /&gt;
def valideaza_cuvant(cuvant):&lt;br /&gt;
    return len(cuvant) &amp;lt;= 11 and len(set(cuvant)) == len(cuvant)&lt;br /&gt;
&lt;br /&gt;
def genereaza_anagrame(cuvant):&lt;br /&gt;
    vocale = [caracter for caracter in cuvant if este_vocala(caracter)]&lt;br /&gt;
    consoane = [caracter for caracter in cuvant if not este_vocala(caracter)]&lt;br /&gt;
&lt;br /&gt;
    vocale_unice = set(vocale)&lt;br /&gt;
    pozitii_vocale = {vocala: [i for i, caracter in enumerate(cuvant) if caracter == vocala] for vocala in vocale_unice}&lt;br /&gt;
&lt;br /&gt;
    anagrame = set()&lt;br /&gt;
&lt;br /&gt;
    for consoane_permutate in set(permutations(consoane)):&lt;br /&gt;
        anagrama_curenta = list(consoane_permutate)&lt;br /&gt;
&lt;br /&gt;
        for vocala in vocale_unice:&lt;br /&gt;
            for pozitie in pozitii_vocale[vocala]:&lt;br /&gt;
                anagrama_curenta.insert(pozitie, vocala)&lt;br /&gt;
&lt;br /&gt;
        anagrame.add(&amp;quot;&amp;quot;.join(anagrama_curenta))&lt;br /&gt;
&lt;br /&gt;
    return sorted(anagrame)&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    cuvant = input(&amp;quot;Introduceți cuvântul s: &amp;quot;).lower()&lt;br /&gt;
&lt;br /&gt;
    if valideaza_cuvant(cuvant):&lt;br /&gt;
        anagrame = genereaza_anagrame(cuvant)&lt;br /&gt;
&lt;br /&gt;
        for anagrama in anagrame:&lt;br /&gt;
            print(anagrama)&lt;br /&gt;
&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Cuvântul trebuie să aibă cel mult 11 litere distincte.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3906_-_suma_perm_cif&amp;diff=7715</id>
		<title>3906 - suma perm cif</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3906_-_suma_perm_cif&amp;diff=7715"/>
		<updated>2023-12-09T21:42:13Z</updated>

		<summary type="html">&lt;p&gt;Gabii: am adaugat explicatia&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cerința =&lt;br /&gt;
Scrieți un program care citește un număr natural &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; cu cifre distincte și care să calculeze și să afișeze suma &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; a tuturor numerelor obținute prin rearanjarea cifrelor lui &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Programul citește de la tastatură numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Programul va afișa pe ecran numărul &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt;, reprezentând suma cerută.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; are cel mult &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt; cifre și are cifrele distincte.&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
Intrare&lt;br /&gt;
 123&lt;br /&gt;
Ieșire&lt;br /&gt;
 1332&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Numere obținute din &amp;lt;code&amp;gt;123&amp;lt;/code&amp;gt; prin amestecarea cifrelor sunt &amp;lt;code&amp;gt;123&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;132&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;213&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;231&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;312&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;321&amp;lt;/code&amp;gt;, iar suma lor este &amp;lt;code&amp;gt;1332&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
Intrare&lt;br /&gt;
 1323&lt;br /&gt;
consola&lt;br /&gt;
 Cifrele trebuie să fie distincte.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
from itertools import permutations&lt;br /&gt;
&lt;br /&gt;
def calculate_sum_of_permutations(n):&lt;br /&gt;
    # Convertim numărul într-o listă de cifre&lt;br /&gt;
    digits = [int(digit) for digit in str(n)]&lt;br /&gt;
&lt;br /&gt;
    # Verificăm dacă cifrele sunt distincte&lt;br /&gt;
    if len(digits) != len(set(digits)):&lt;br /&gt;
        raise ValueError(&amp;quot;Cifrele trebuie să fie distincte.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    # Generăm toate permutările cifrelor&lt;br /&gt;
    all_permutations = permutations(digits)&lt;br /&gt;
&lt;br /&gt;
    # Calculăm suma permutărilor și le afișăm&lt;br /&gt;
    total_sum = 0&lt;br /&gt;
    for perm in all_permutations:&lt;br /&gt;
        perm_number = int(&#039;&#039;.join(map(str, perm)))&lt;br /&gt;
        total_sum += perm_number&lt;br /&gt;
&lt;br /&gt;
    return total_sum&lt;br /&gt;
&lt;br /&gt;
def validate_n(n):&lt;br /&gt;
    # Verificăm restricțiile&lt;br /&gt;
    return 1 &amp;lt;= n &amp;lt;= 10**9 - 1&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    try:&lt;br /&gt;
        n = int(input(&amp;quot;Introduceți un număr cu cifre distincte: &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
        # Verificăm restricțiile utilizând funcția separată&lt;br /&gt;
        if not validate_n(n):&lt;br /&gt;
            print(&amp;quot;Numărul trebuie să fie mai mic decât 10^9.&amp;quot;)&lt;br /&gt;
            return&lt;br /&gt;
&lt;br /&gt;
        # Calculăm suma și o afișăm&lt;br /&gt;
        result = calculate_sum_of_permutations(n)&lt;br /&gt;
        print(f&amp;quot;Suma tuturor numerelor obținute prin rearanjarea cifrelor lui {n} este: {result}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    except ValueError as e:&lt;br /&gt;
        print(e)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2141_-_Exp&amp;diff=7714</id>
		<title>2141 - Exp</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2141_-_Exp&amp;diff=7714"/>
		<updated>2023-12-09T21:39:51Z</updated>

		<summary type="html">&lt;p&gt;Gabii: radical de ordin m din (x1⋅x2⋅…⋅xn) radicalul nu l pot pune =]&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunț ==&lt;br /&gt;
Se dă un şir de &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere naturale nenule &amp;lt;code&amp;gt;x1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;x2&amp;lt;/code&amp;gt;, …, &amp;lt;code&amp;gt;xn&amp;lt;/code&amp;gt; şi un număr natural &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Cerința =&lt;br /&gt;
Să se verifice dacă valoarea expresiei radical de ordin m din (x1⋅x2⋅…⋅xn) este un număr natural. În caz afirmativ să se afișeze acest număr descompus în factori primi.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;expIN.txt&amp;lt;/code&amp;gt; conține pe prima linie &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;, pe linia a doua &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, iar pe linia a treia numerele &amp;lt;code&amp;gt;x1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;x2&amp;lt;/code&amp;gt;, …, &amp;lt;code&amp;gt;xn&amp;lt;/code&amp;gt; separate între ele prin câte un spațiu.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
În fișierul de ieșire &amp;lt;code&amp;gt;expOUt.txt&amp;lt;/code&amp;gt; se va scrie pe prima linie cifra &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;, dacă valoarea expresiei nu este un număr natural, respectiv &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; dacă este un număr natural. Dacă valoarea expresiei este un număr natural pe următoarele linii se vor scrie perechi de forma &amp;lt;code&amp;gt;p e&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; este factor prim care apare în descompunere la puterea &amp;lt;code&amp;gt;e&amp;gt;=1&amp;lt;/code&amp;gt;). Aceste perechi se vor scrie în ordine crescătoare după primul număr (adică &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;0 &amp;lt; n &amp;lt; 5000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;0 &amp;lt; xi&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;&amp;lt; 30.001&amp;lt;/code&amp;gt;, pentru orice &amp;lt;code&amp;gt;i=1..n&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; poate fi una din cifrele &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1: =&lt;br /&gt;
&amp;lt;code&amp;gt;expIN.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 2&lt;br /&gt;
 4&lt;br /&gt;
 32 81 100 18&lt;br /&gt;
&amp;lt;code&amp;gt;expOUt.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 1&lt;br /&gt;
 2 4&lt;br /&gt;
 3 3&lt;br /&gt;
 5 1&lt;br /&gt;
&lt;br /&gt;
= Exemplul 2: =&lt;br /&gt;
&amp;lt;code&amp;gt;expIN.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 6&lt;br /&gt;
 6&lt;br /&gt;
 45 5 44 23 32 32&lt;br /&gt;
consola:&lt;br /&gt;
 Eroare: Numărul m trebuie să fie una din cifrele 2, 3, 4.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def respecta_restrictiile(m, n, xi):&lt;br /&gt;
    if not (0 &amp;lt; n &amp;lt; 5000):&lt;br /&gt;
        print(&amp;quot;Eroare: Numărul de elemente n trebuie să fie între 0 și 5000.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    if not (0 &amp;lt; m &amp;lt; 5):&lt;br /&gt;
        print(&amp;quot;Eroare: Numărul m trebuie să fie una din cifrele 2, 3, 4.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    if not all(0 &amp;lt; x &amp;lt; 30001 for x in xi):&lt;br /&gt;
        print(&amp;quot;Eroare: Elementele xi trebuie să fie în intervalul (0, 30001).&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def este_numar_natural(n):&lt;br /&gt;
    return n == int(n) and n &amp;gt; 0&lt;br /&gt;
&lt;br /&gt;
def descompunere_in_factori_primi(numar):&lt;br /&gt;
    factori_primi = []&lt;br /&gt;
    divizor = 2&lt;br /&gt;
    &lt;br /&gt;
    while divizor &amp;lt;= numar:&lt;br /&gt;
        putere = 0&lt;br /&gt;
        while numar % divizor == 0:&lt;br /&gt;
            numar //= divizor&lt;br /&gt;
            putere += 1&lt;br /&gt;
        if putere &amp;gt; 0:&lt;br /&gt;
            factori_primi.append((divizor, putere))&lt;br /&gt;
        divizor += 1&lt;br /&gt;
    &lt;br /&gt;
    return factori_primi&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;quot;expIN.txt&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        m = int(f.readline().strip())&lt;br /&gt;
        n = int(f.readline().strip())&lt;br /&gt;
        xi = list(map(int, f.readline().split()))&lt;br /&gt;
&lt;br /&gt;
    if not respecta_restrictiile(m, n, xi):&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    # Restul codului pentru calcule și scrierea în fișier rămâne neschimbat&lt;br /&gt;
    produs = 1&lt;br /&gt;
    for x in xi:&lt;br /&gt;
        produs *= x&lt;br /&gt;
&lt;br /&gt;
    radical_m = produs ** (1/m)&lt;br /&gt;
&lt;br /&gt;
    with open(&amp;quot;expOUT.txt&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
        if este_numar_natural(radical_m):&lt;br /&gt;
            f.write(&amp;quot;1\n&amp;quot;)&lt;br /&gt;
            factori_primi = descompunere_in_factori_primi(int(radical_m))&lt;br /&gt;
            for factor, putere in factori_primi:&lt;br /&gt;
                f.write(f&amp;quot;{factor} {putere}\n&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            f.write(&amp;quot;0\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1148_-Exista_Impare_Div_Imp&amp;diff=7713</id>
		<title>1148 -Exista Impare Div Imp</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1148_-Exista_Impare_Div_Imp&amp;diff=7713"/>
		<updated>2023-12-09T21:36:04Z</updated>

		<summary type="html">&lt;p&gt;Gabii: Am uitat sa dau save =]&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cerinţa =&lt;br /&gt;
Se dă un şir cu &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; elemente, numere naturale. Folosind metoda Divide et Impera să se verifice dacă în şir există elemente impare.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Programul citește de la tastatură numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, iar apoi cele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; elemente ale şirului, separate prin spaţii.&lt;br /&gt;
&lt;br /&gt;
= Date de ieşire =&lt;br /&gt;
Programul afișează pe ecran mesajul &amp;lt;code&amp;gt;DA&amp;lt;/code&amp;gt;, dacă şirul conţine elemente impare, respectiv &amp;lt;code&amp;gt;NU&amp;lt;/code&amp;gt; în caz contrar.&lt;br /&gt;
&lt;br /&gt;
= Restricţii şi precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 100&amp;lt;/code&amp;gt;&lt;br /&gt;
* elementele şirului vor fi mai mici decât &amp;lt;code&amp;gt;10000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
Date de intrare&lt;br /&gt;
 5&lt;br /&gt;
 2 8 6 10 8&lt;br /&gt;
Date de ieșire&lt;br /&gt;
 NU&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
Date de intrare&lt;br /&gt;
 101&lt;br /&gt;
Consola&lt;br /&gt;
 Valoarea nu respecta conditiile. Incercati din nou.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
def exista_element_impar(arr, stanga, dreapta):&lt;br /&gt;
    if stanga == dreapta:&lt;br /&gt;
        # Caz de bază: un singur element&lt;br /&gt;
        return arr[stanga] % 2 == 1&lt;br /&gt;
&lt;br /&gt;
    mijloc = (stanga + dreapta) // 2&lt;br /&gt;
&lt;br /&gt;
    # Verifică dacă există elemente impare în ambele părți&lt;br /&gt;
    exista_stanga = exista_element_impar(arr, stanga, mijloc)&lt;br /&gt;
    exista_dreapta = exista_element_impar(arr, mijloc + 1, dreapta)&lt;br /&gt;
&lt;br /&gt;
    # Returnează True dacă există elemente impare în cel puțin una dintre părți&lt;br /&gt;
    return exista_stanga or exista_dreapta&lt;br /&gt;
&lt;br /&gt;
# Funcție pentru verificarea valorii lui n&lt;br /&gt;
def verifica_n(valoare):&lt;br /&gt;
    return 1 &amp;lt;= valoare &amp;lt;= 100&lt;br /&gt;
&lt;br /&gt;
# Funcție pentru verificarea valorii lui x&lt;br /&gt;
def verifica_x(valoare):&lt;br /&gt;
    return valoare &amp;lt;= 10000&lt;br /&gt;
&lt;br /&gt;
# Funcție pentru citirea unui număr întreg într-un interval specificat&lt;br /&gt;
def citeste_numar(mesaj, functie_verificare):&lt;br /&gt;
    while True:&lt;br /&gt;
        try:&lt;br /&gt;
            numar = int(input(mesaj))&lt;br /&gt;
            if functie_verificare(numar):&lt;br /&gt;
                return numar&lt;br /&gt;
            else:&lt;br /&gt;
                print(f&amp;quot;Valoarea nu respecta conditiile. Incercati din nou.&amp;quot;)&lt;br /&gt;
        except ValueError:&lt;br /&gt;
            print(&amp;quot;Introduceti un numar valid.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Citirea datelor de intrare&lt;br /&gt;
while True:&lt;br /&gt;
    n = citeste_numar(&amp;quot;Introduceti numarul de elemente (1 &amp;lt;= n &amp;lt;= 100): &amp;quot;, verifica_n)&lt;br /&gt;
    if verifica_n(n):&lt;br /&gt;
        break&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Numarul de elemente nu respecta conditiile. Incercati din nou.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
arr = []&lt;br /&gt;
&lt;br /&gt;
# Reading array elements&lt;br /&gt;
print(&amp;quot;Introduceti cele {} elemente ale sirului:&amp;quot;.format(n), end=&amp;quot; &amp;quot;)&lt;br /&gt;
for i in range(n):&lt;br /&gt;
    element = citeste_numar(f&amp;quot;Introduceti elementul {i + 1} al sirului: &amp;quot;, verifica_x)&lt;br /&gt;
    arr.append(element)&lt;br /&gt;
&lt;br /&gt;
# Verificarea și afișarea rezultatului&lt;br /&gt;
rezultat = exista_element_impar(arr, 0, n - 1)&lt;br /&gt;
if rezultat:&lt;br /&gt;
    print(&amp;quot;DA&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;NU&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1020_-_Mat_Prim&amp;diff=7712</id>
		<title>1020 - Mat Prim</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1020_-_Mat_Prim&amp;diff=7712"/>
		<updated>2023-12-09T21:28:30Z</updated>

		<summary type="html">&lt;p&gt;Gabii: am modificat codul&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cerința =&lt;br /&gt;
Se consideră un șir cu &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; elemente, numere naturale. Folosind metoda Divide et Impera, determinați cel mai mare element prim din acest șir.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Programul citește de la tastatură numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, iar apoi cele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; elemente ale șirului.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Programul va afișa pe ecran numărul &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt;, cel mai mare element prim al șirului.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 1000&amp;lt;/code&amp;gt;&lt;br /&gt;
* elementele șirului vor fi mai mici decât &amp;lt;code&amp;gt;1.000.000&amp;lt;/code&amp;gt;&lt;br /&gt;
* se garantează că în șir apare cel puțin un element prim&lt;br /&gt;
* se recomandă folosirea metodei Divide et Impera&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
Intrare&lt;br /&gt;
 6&lt;br /&gt;
 4 1 8 4 3 5 &lt;br /&gt;
Ieșire&lt;br /&gt;
 5&lt;br /&gt;
&lt;br /&gt;
= Exemplul 2 =&lt;br /&gt;
Intrare&lt;br /&gt;
 4&lt;br /&gt;
 4 4 4 4 &lt;br /&gt;
Ieșire&lt;br /&gt;
 Eroare: În șir trebuie să existe cel puțin un element prim.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def este_prim(numar):&lt;br /&gt;
    if numar &amp;lt; 2:&lt;br /&gt;
        return False&lt;br /&gt;
    for i in range(2, int(numar**0.5) + 1):&lt;br /&gt;
        if numar % i == 0:&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def gaseste_cel_mai_mare_prim(sir, stanga, dreapta):&lt;br /&gt;
    if stanga == dreapta:&lt;br /&gt;
        return sir[stanga] if este_prim(sir[stanga]) else -1&lt;br /&gt;
&lt;br /&gt;
    mijloc = (stanga + dreapta) // 2&lt;br /&gt;
&lt;br /&gt;
    # Caută în stânga și dreapta&lt;br /&gt;
    cel_mai_mare_prim_stanga = gaseste_cel_mai_mare_prim(sir, stanga, mijloc)&lt;br /&gt;
    cel_mai_mare_prim_dreapta = gaseste_cel_mai_mare_prim(sir, mijloc + 1, dreapta)&lt;br /&gt;
&lt;br /&gt;
    # Combină rezultatele&lt;br /&gt;
    return max(cel_mai_mare_prim_stanga, cel_mai_mare_prim_dreapta)&lt;br /&gt;
&lt;br /&gt;
def verifica_restrictii(n, sir):&lt;br /&gt;
    # Verifică restricția 1: 1 ≤ n ≤ 1000&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 1000):&lt;br /&gt;
        print(&amp;quot;Nu respectă condiția lui n&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    # Verifică restricția 2: Elementele șirului vor fi mai mici decât 1.000.000&lt;br /&gt;
    if any(x &amp;gt;= 1000000 for x in sir):&lt;br /&gt;
        print(&amp;quot;Eroare: Elementele șirului trebuie să fie mai mici decât 1.000.000.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    # Verifică restricția 3: Se garantează că în șir apare cel puțin un element prim&lt;br /&gt;
    if all(not este_prim(x) for x in sir):&lt;br /&gt;
        print(&amp;quot;Eroare: În șir trebuie să existe cel puțin un element prim.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    # Exemplu de folosire în funcția principală&lt;br /&gt;
    n = int(input(&amp;quot;Introduceti numarul de elemente: &amp;quot;))&lt;br /&gt;
    &lt;br /&gt;
    # Inițializează un șir gol pentru a colecta elementele&lt;br /&gt;
    sir = []&lt;br /&gt;
&lt;br /&gt;
    # Colectează elementele șirului&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        element = int(input(&amp;quot;Introduceti elementul {}: &amp;quot;.format(i + 1)))&lt;br /&gt;
        sir.append(element)&lt;br /&gt;
&lt;br /&gt;
    # Verifică restricțiile înainte de a continua&lt;br /&gt;
    if not verifica_restrictii(n, sir):&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    # Continuă cu restul codului&lt;br /&gt;
    rezultat = gaseste_cel_mai_mare_prim(sir, 0, n - 1)&lt;br /&gt;
    print(&amp;quot;Cel mai mare element prim din sir:&amp;quot;, rezultat)&lt;br /&gt;
&lt;br /&gt;
# Apelul funcției principale&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0968_-_Copac&amp;diff=7711</id>
		<title>0968 - Copac</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0968_-_Copac&amp;diff=7711"/>
		<updated>2023-12-09T20:35:55Z</updated>

		<summary type="html">&lt;p&gt;Gabii: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunț ==&lt;br /&gt;
În grădina din palatul lui Făt-Frumos a răsărit tulpina fragedă a unui copăcel. Impresionat de gingăşia lui, Făt-Frumos dădu fuga la izvorul fermecat şi aduse nişte apă vie cu care udă copăcelul.&lt;br /&gt;
&lt;br /&gt;
A doua zi, surpriză mare! Copăcelului i-au crescut trei ramuri minunate: una de argint, una de aur şi alta de rubin. Făt-Frumos, fericit, dădu din nou fuga la izvorul fermecat şi aduse apă vie pentru copăcel.&lt;br /&gt;
&lt;br /&gt;
A treia zi, surpriză şi mai mare! Ramura de argint s-a transformat în trei ramuri noi: una de argint, una de aur şi una de rubin. Ramura de aur s-a transformat în două ramuri noi: una de argint şi alta de rubin. Ramura de rubin s-a transformat în două ramuri noi: una de aur şi una de rubin.&lt;br /&gt;
&lt;br /&gt;
Şi în a patra zi, Făt-Frumos observă că fiecare ramură de argint s-a transformat în trei ramuri noi: una de argint, una de aur şi una de rubin; fiecare ramură de aur s-a transformat în două ramuri noi: una de argint şi alta de rubin; fiecare ramură de rubin s-a transformat în două ramuri noi: una de aur şi una de rubin.&lt;br /&gt;
&lt;br /&gt;
Copăcelul era mai bogat şi mai frumos. Strălucea ca un soare, lumina lui ajungând până la palatul Zmeului-Zmeilor.&lt;br /&gt;
&lt;br /&gt;
Zmeul-Zmeilor se îndreptă ca fulgerul spre palatul lui Făt-Frumos. Vroia copacul. Dar cum să facă? Dacă s-ar lupta cu Făt-Frumos, ar pierde lupta. Mereu s-a întâmplat aşa. Se gândi, se gândi… şi exact când a ajuns în faţa lui Făt-Frumos i-a venit o idee spunându-i acestuia:&lt;br /&gt;
&lt;br /&gt;
- Făt-Frumos, dacă îmi vei spune câte ramuri de argint, câte ramuri de aur şi câte ramuri de rubin va avea copacul peste &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; zile începând din ziua asta, atunci copacul va rămâne al tău. De nu, al meu va fi!&lt;br /&gt;
&lt;br /&gt;
Ştiind că ramurile copacului se transformă şi în zilele următoare la fel ca în ziua a patra, ajutaţi-l pe Făt-Frumos să găsească răspunsul la întrebare astfel încât copacul să rămână al lui.&lt;br /&gt;
&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Scrieţi un program care citeşte un număr natural &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; şi care să determine şi să afişeze trei numere naturale reprezentând numărul de ramuri de argint, respectiv de aur şi de rubin pe care le va avea copacul peste &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; zile, în acestă ordine.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul va afișa pe ecran cele trei numere, în ordinea cerută, separate prin exact un spațiu.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
&lt;br /&gt;
* 0 ≤ n ≤ 45&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
Intrare  &lt;br /&gt;
 2&lt;br /&gt;
Ieșire&lt;br /&gt;
 20 25 36&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Copacul va avea peste n=2 zile: 20 ramuri de argint, 25 ramuri de aur, 36 ramuri de rubin&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
Intrare 46&lt;br /&gt;
&lt;br /&gt;
Ieșire Numărul introdus nu respectă restricțiile (0 ≤ n ≤ 45).&lt;br /&gt;
&lt;br /&gt;
= Explicație =&lt;br /&gt;
Copacul va avea peste &amp;lt;code&amp;gt;n=10&amp;lt;/code&amp;gt; zile: &amp;lt;code&amp;gt;13001&amp;lt;/code&amp;gt; ramuri de argint, &amp;lt;code&amp;gt;16212&amp;lt;/code&amp;gt; ramuri de aur, &amp;lt;code&amp;gt;23427&amp;lt;/code&amp;gt; ramuri de rubin&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def verifica_restrictii(n):&lt;br /&gt;
    return 0 &amp;lt;= n &amp;lt;= 45&lt;br /&gt;
&lt;br /&gt;
def calculeaza_ramuri_copac(n):&lt;br /&gt;
    if not verifica_restrictii(n):&lt;br /&gt;
        print(&amp;quot;Numărul introdus nu respectă restricțiile (0 ≤ n ≤ 45).&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    if n == 0:&lt;br /&gt;
        return 4, 5, 7&lt;br /&gt;
&lt;br /&gt;
    ramuri_argint = 4&lt;br /&gt;
    ramuri_aur = 5&lt;br /&gt;
    ramuri_rubin = 7&lt;br /&gt;
&lt;br /&gt;
    zi = 1&lt;br /&gt;
&lt;br /&gt;
    while zi &amp;lt;= n:&lt;br /&gt;
        ramuri_argint_nou = ramuri_argint + ramuri_aur&lt;br /&gt;
        ramuri_aur_nou = ramuri_argint + ramuri_rubin&lt;br /&gt;
        ramuri_rubin_nou = ramuri_argint + ramuri_aur + ramuri_rubin&lt;br /&gt;
&lt;br /&gt;
        ramuri_argint, ramuri_aur, ramuri_rubin = ramuri_argint_nou, ramuri_aur_nou, ramuri_rubin_nou&lt;br /&gt;
&lt;br /&gt;
        zi += 1&lt;br /&gt;
&lt;br /&gt;
    return ramuri_argint, ramuri_aur, ramuri_rubin&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    n = int(input(&amp;quot;Introduceți numărul n (0 ≤ n ≤ 45): &amp;quot;))&lt;br /&gt;
    rezultate = calculeaza_ramuri_copac(n)&lt;br /&gt;
    if rezultate:&lt;br /&gt;
        print(*rezultate)  # Afiseaza cele trei numere separate printr-un spatiu&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3260_-_Invers&amp;diff=7710</id>
		<title>3260 - Invers</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3260_-_Invers&amp;diff=7710"/>
		<updated>2023-12-09T20:33:10Z</updated>

		<summary type="html">&lt;p&gt;Gabii: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Veșnicul Gigel vrea să dea la Facultatea de Informatică din Iași pentru că e #ceaMaiTare. De asta s-a apucat de probleme pe pbinfo și a dat peste următoarea problema ce i-a plăcut atât de mult încât vă provoacă și pe voi să o rezolvați:&lt;br /&gt;
&lt;br /&gt;
Se dă funcția f(x)=sin(x) + sin(2*x) + x și o valoare y. Știind că funcția este strict crescătoare pe intervalul [0,1), se cere să se gasească pentru ce  x∈[0,1) avem că f(x)≈y (aproximare cu 8 zecimale).&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Se citește de la tastatura valoarea .&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
0&amp;lt;= x &amp;lt;1 afișat cu o aproximare de 8 zecimale precise.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
&lt;br /&gt;
* pentru orice 0&amp;lt;=y&amp;lt;2.7 vom avea ca 0&amp;lt;=x&amp;lt;1 &lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
Intrare:&lt;br /&gt;
 1.34&lt;br /&gt;
&lt;br /&gt;
Ieșire:&lt;br /&gt;
 0.35083179&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Considerand f(x)=sin(x)+sin(2∗x)+x  avem ca:&lt;br /&gt;
&lt;br /&gt;
• f(0.35083177) = 1.33999994&lt;br /&gt;
&lt;br /&gt;
• f(0.35083178) = 1.33999998&lt;br /&gt;
&lt;br /&gt;
• f(0.35083179) = 1.34000001&lt;br /&gt;
&lt;br /&gt;
• f(0.35083180) = 1.34000005&lt;br /&gt;
&lt;br /&gt;
După cum se observă, valoarea cea mai apropiată de  în aproximarea cu 8 zecimale este , valoare ce este considerată a fi corectă (deși imprecisă, este cea mai apropiată valoare ce ar putea fi dată lui x pentru ca ).&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
Intrare&lt;br /&gt;
 3&lt;br /&gt;
&lt;br /&gt;
Ieșire&lt;br /&gt;
 Valoarea lui y nu respectă restricțiile.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
def f(x):&lt;br /&gt;
    return math.sin(x) + math.sin(2*x) + x&lt;br /&gt;
&lt;br /&gt;
def verifica_restrictie(y):&lt;br /&gt;
    return 0 &amp;lt;= y &amp;lt;= 2.7&lt;br /&gt;
&lt;br /&gt;
def aproximare_bisectie(y):&lt;br /&gt;
    epsilon = 1e-8  # Precizia dorită&lt;br /&gt;
    a, b = 0, 1  # Intervalul [0, 1)&lt;br /&gt;
&lt;br /&gt;
    while b - a &amp;gt; epsilon:&lt;br /&gt;
        mid = (a + b) / 2&lt;br /&gt;
        if f(mid) &amp;lt; y:&lt;br /&gt;
            a = mid&lt;br /&gt;
        else:&lt;br /&gt;
            b = mid&lt;br /&gt;
&lt;br /&gt;
    return (a + b) / 2&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    y = float(input(&amp;quot;Introduceți valoarea y: &amp;quot;))&lt;br /&gt;
    &lt;br /&gt;
    if verifica_restrictie(y):&lt;br /&gt;
        rezultat = aproximare_bisectie(y)&lt;br /&gt;
        print(f&amp;quot;{rezultat:.8f}&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Valoarea lui y nu respectă restricțiile.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0806_-_Generare_sir&amp;diff=7709</id>
		<title>0806 - Generare sir</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0806_-_Generare_sir&amp;diff=7709"/>
		<updated>2023-12-09T20:29:56Z</updated>

		<summary type="html">&lt;p&gt;Gabii: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerinţa==&lt;br /&gt;
Se consideră şirul definit mai jos:&lt;br /&gt;
&lt;br /&gt;
fn= 1  daca n =1 &lt;br /&gt;
&lt;br /&gt;
fn= 1 + f(n-1)  daca n e par&lt;br /&gt;
&lt;br /&gt;
fn= 1 + 2*f(n-2)  dacă n altfel&lt;br /&gt;
&lt;br /&gt;
în care nu există doi termeni cu aceeași paritate aflați pe poziții consecutive: &amp;lt;code&amp;gt;1, 2, 3, 4, 7, 8, 15, 16 ....&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Pentru un număr natural &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, termen al şirului dat, se cere să se afișeze pe ecran, în ordine strict descrescătoare, separați prin câte un spațiu, toţi termenii şirului care sunt mai mici sau egali cu &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Programul citeşte de la tastatură numărul &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Date de ieşire==&lt;br /&gt;
Programul va afişa pe ecran în ordine strict descrescătoare, separați prin câte un spațiu, toţi termenii şirului care sunt mai mici sau egali cu &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Restricţii şi precizări =&lt;br /&gt;
&lt;br /&gt;
* 1 ≤ x ≤ 1.000.000.000&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1==&lt;br /&gt;
Date intrare &lt;br /&gt;
 15&lt;br /&gt;
Date iesire &lt;br /&gt;
 15 8 7 4 3 2 1&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2==&lt;br /&gt;
Date intrare &lt;br /&gt;
 0&lt;br /&gt;
Cerința&lt;br /&gt;
 Numărul introdus nu respectă restricțiile.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
def verifica_restrictii(x):&lt;br /&gt;
    return 1 &amp;lt;= x &amp;lt;= 1000000000&lt;br /&gt;
&lt;br /&gt;
def genereaza_si_afiseaza_sir(x):&lt;br /&gt;
    def f(n):&lt;br /&gt;
        if n == 1:&lt;br /&gt;
            return 1&lt;br /&gt;
        elif n % 2 == 0:&lt;br /&gt;
            return 1 + f(n - 1)&lt;br /&gt;
        else:&lt;br /&gt;
            return 1 + 2 * f(n - 2)&lt;br /&gt;
&lt;br /&gt;
    termeni_sir = []&lt;br /&gt;
&lt;br /&gt;
    # Generăm șirul până când obținem un termen mai mare decât x&lt;br /&gt;
    n = 1&lt;br /&gt;
    while f(n) &amp;lt;= x:&lt;br /&gt;
        termeni_sir.append(f(n))&lt;br /&gt;
        n += 1&lt;br /&gt;
&lt;br /&gt;
    # Afișăm termenii în ordine descrescătoare&lt;br /&gt;
    termeni_sir.sort(reverse=True)&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot; &amp;quot;.join(map(str, termeni_sir)))&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    x = int(input(&amp;quot;Introduceți numărul x: &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    if verifica_restrictii(x):&lt;br /&gt;
        genereaza_si_afiseaza_sir(x)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Numărul introdus nu respectă restricțiile.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0968_-_Copac&amp;diff=7708</id>
		<title>0968 - Copac</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0968_-_Copac&amp;diff=7708"/>
		<updated>2023-12-09T20:29:23Z</updated>

		<summary type="html">&lt;p&gt;Gabii: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunț ==&lt;br /&gt;
În grădina din palatul lui Făt-Frumos a răsărit tulpina fragedă a unui copăcel. Impresionat de gingăşia lui, Făt-Frumos dădu fuga la izvorul fermecat şi aduse nişte apă vie cu care udă copăcelul.&lt;br /&gt;
&lt;br /&gt;
A doua zi, surpriză mare! Copăcelului i-au crescut trei ramuri minunate: una de argint, una de aur şi alta de rubin. Făt-Frumos, fericit, dădu din nou fuga la izvorul fermecat şi aduse apă vie pentru copăcel.&lt;br /&gt;
&lt;br /&gt;
A treia zi, surpriză şi mai mare! Ramura de argint s-a transformat în trei ramuri noi: una de argint, una de aur şi una de rubin. Ramura de aur s-a transformat în două ramuri noi: una de argint şi alta de rubin. Ramura de rubin s-a transformat în două ramuri noi: una de aur şi una de rubin.&lt;br /&gt;
&lt;br /&gt;
Şi în a patra zi, Făt-Frumos observă că fiecare ramură de argint s-a transformat în trei ramuri noi: una de argint, una de aur şi una de rubin; fiecare ramură de aur s-a transformat în două ramuri noi: una de argint şi alta de rubin; fiecare ramură de rubin s-a transformat în două ramuri noi: una de aur şi una de rubin.&lt;br /&gt;
&lt;br /&gt;
Copăcelul era mai bogat şi mai frumos. Strălucea ca un soare, lumina lui ajungând până la palatul Zmeului-Zmeilor.&lt;br /&gt;
&lt;br /&gt;
Zmeul-Zmeilor se îndreptă ca fulgerul spre palatul lui Făt-Frumos. Vroia copacul. Dar cum să facă? Dacă s-ar lupta cu Făt-Frumos, ar pierde lupta. Mereu s-a întâmplat aşa. Se gândi, se gândi… şi exact când a ajuns în faţa lui Făt-Frumos i-a venit o idee spunându-i acestuia:&lt;br /&gt;
&lt;br /&gt;
- Făt-Frumos, dacă îmi vei spune câte ramuri de argint, câte ramuri de aur şi câte ramuri de rubin va avea copacul peste &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; zile începând din ziua asta, atunci copacul va rămâne al tău. De nu, al meu va fi!&lt;br /&gt;
&lt;br /&gt;
Ştiind că ramurile copacului se transformă şi în zilele următoare la fel ca în ziua a patra, ajutaţi-l pe Făt-Frumos să găsească răspunsul la întrebare astfel încât copacul să rămână al lui.&lt;br /&gt;
&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Scrieţi un program care citeşte un număr natural &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; şi care să determine şi să afişeze trei numere naturale reprezentând numărul de ramuri de argint, respectiv de aur şi de rubin pe care le va avea copacul peste &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; zile, în acestă ordine.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul va afișa pe ecran cele trei numere, în ordinea cerută, separate prin exact un spațiu.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
&lt;br /&gt;
* 0 ≤ n ≤ 45&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Copacul va avea peste n=2 zile: 20 ramuri de argint, 25 ramuri de aur, 36 ramuri de rubin&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
Intrare  2&lt;br /&gt;
&lt;br /&gt;
Ieșire 20 25 36&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
Intrare 46&lt;br /&gt;
&lt;br /&gt;
Ieșire Numărul introdus nu respectă restricțiile (0 ≤ n ≤ 45).&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def verifica_restrictii(n):&lt;br /&gt;
    return 0 &amp;lt;= n &amp;lt;= 45&lt;br /&gt;
&lt;br /&gt;
def calculeaza_ramuri_copac(n):&lt;br /&gt;
    if not verifica_restrictii(n):&lt;br /&gt;
        print(&amp;quot;Numărul introdus nu respectă restricțiile (0 ≤ n ≤ 45).&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    if n == 0:&lt;br /&gt;
        return 4, 5, 7&lt;br /&gt;
&lt;br /&gt;
    ramuri_argint = 4&lt;br /&gt;
    ramuri_aur = 5&lt;br /&gt;
    ramuri_rubin = 7&lt;br /&gt;
&lt;br /&gt;
    zi = 1&lt;br /&gt;
&lt;br /&gt;
    while zi &amp;lt;= n:&lt;br /&gt;
        ramuri_argint_nou = ramuri_argint + ramuri_aur&lt;br /&gt;
        ramuri_aur_nou = ramuri_argint + ramuri_rubin&lt;br /&gt;
        ramuri_rubin_nou = ramuri_argint + ramuri_aur + ramuri_rubin&lt;br /&gt;
&lt;br /&gt;
        ramuri_argint, ramuri_aur, ramuri_rubin = ramuri_argint_nou, ramuri_aur_nou, ramuri_rubin_nou&lt;br /&gt;
&lt;br /&gt;
        zi += 1&lt;br /&gt;
&lt;br /&gt;
    return ramuri_argint, ramuri_aur, ramuri_rubin&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    n = int(input(&amp;quot;Introduceți numărul n (0 ≤ n ≤ 45): &amp;quot;))&lt;br /&gt;
    rezultate = calculeaza_ramuri_copac(n)&lt;br /&gt;
    if rezultate:&lt;br /&gt;
        print(*rezultate)  # Afiseaza cele trei numere separate printr-un spatiu&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0968_-_Copac&amp;diff=7707</id>
		<title>0968 - Copac</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0968_-_Copac&amp;diff=7707"/>
		<updated>2023-12-09T20:28:03Z</updated>

		<summary type="html">&lt;p&gt;Gabii: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunț ==&lt;br /&gt;
În grădina din palatul lui Făt-Frumos a răsărit tulpina fragedă a unui copăcel. Impresionat de gingăşia lui, Făt-Frumos dădu fuga la izvorul fermecat şi aduse nişte apă vie cu care udă copăcelul.&lt;br /&gt;
&lt;br /&gt;
A doua zi, surpriză mare! Copăcelului i-au crescut trei ramuri minunate: una de argint, una de aur şi alta de rubin. Făt-Frumos, fericit, dădu din nou fuga la izvorul fermecat şi aduse apă vie pentru copăcel.&lt;br /&gt;
&lt;br /&gt;
A treia zi, surpriză şi mai mare! Ramura de argint s-a transformat în trei ramuri noi: una de argint, una de aur şi una de rubin. Ramura de aur s-a transformat în două ramuri noi: una de argint şi alta de rubin. Ramura de rubin s-a transformat în două ramuri noi: una de aur şi una de rubin.&lt;br /&gt;
&lt;br /&gt;
Şi în a patra zi, Făt-Frumos observă că fiecare ramură de argint s-a transformat în trei ramuri noi: una de argint, una de aur şi una de rubin; fiecare ramură de aur s-a transformat în două ramuri noi: una de argint şi alta de rubin; fiecare ramură de rubin s-a transformat în două ramuri noi: una de aur şi una de rubin.&lt;br /&gt;
&lt;br /&gt;
Copăcelul era mai bogat şi mai frumos. Strălucea ca un soare, lumina lui ajungând până la palatul Zmeului-Zmeilor.&lt;br /&gt;
&lt;br /&gt;
Zmeul-Zmeilor se îndreptă ca fulgerul spre palatul lui Făt-Frumos. Vroia copacul. Dar cum să facă? Dacă s-ar lupta cu Făt-Frumos, ar pierde lupta. Mereu s-a întâmplat aşa. Se gândi, se gândi… şi exact când a ajuns în faţa lui Făt-Frumos i-a venit o idee spunându-i acestuia:&lt;br /&gt;
&lt;br /&gt;
- Făt-Frumos, dacă îmi vei spune câte ramuri de argint, câte ramuri de aur şi câte ramuri de rubin va avea copacul peste &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; zile începând din ziua asta, atunci copacul va rămâne al tău. De nu, al meu va fi!&lt;br /&gt;
&lt;br /&gt;
Ştiind că ramurile copacului se transformă şi în zilele următoare la fel ca în ziua a patra, ajutaţi-l pe Făt-Frumos să găsească răspunsul la întrebare astfel încât copacul să rămână al lui.&lt;br /&gt;
&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Scrieţi un program care citeşte un număr natural &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; şi care să determine şi să afişeze trei numere naturale reprezentând numărul de ramuri de argint, respectiv de aur şi de rubin pe care le va avea copacul peste &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; zile, în acestă ordine.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul va afișa pe ecran cele trei numere, în ordinea cerută, separate prin exact un spațiu.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;0 ≤ n ≤ 45&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Copacul va avea peste n=2 zile: 20 ramuri de argint, 25 ramuri de aur, 36 ramuri de rubin&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
Intrare  2&lt;br /&gt;
&lt;br /&gt;
Ieșire 20 25 36&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
Intrare 46&lt;br /&gt;
&lt;br /&gt;
Ieșire Numărul introdus nu respectă restricțiile (0 ≤ n ≤ 45).&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def verifica_restrictii(n):&lt;br /&gt;
    return 0 &amp;lt;= n &amp;lt;= 45&lt;br /&gt;
&lt;br /&gt;
def calculeaza_ramuri_copac(n):&lt;br /&gt;
    if not verifica_restrictii(n):&lt;br /&gt;
        print(&amp;quot;Numărul introdus nu respectă restricțiile (0 ≤ n ≤ 45).&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    if n == 0:&lt;br /&gt;
        return 4, 5, 7&lt;br /&gt;
&lt;br /&gt;
    ramuri_argint = 4&lt;br /&gt;
    ramuri_aur = 5&lt;br /&gt;
    ramuri_rubin = 7&lt;br /&gt;
&lt;br /&gt;
    zi = 1&lt;br /&gt;
&lt;br /&gt;
    while zi &amp;lt;= n:&lt;br /&gt;
        ramuri_argint_nou = ramuri_argint + ramuri_aur&lt;br /&gt;
        ramuri_aur_nou = ramuri_argint + ramuri_rubin&lt;br /&gt;
        ramuri_rubin_nou = ramuri_argint + ramuri_aur + ramuri_rubin&lt;br /&gt;
&lt;br /&gt;
        ramuri_argint, ramuri_aur, ramuri_rubin = ramuri_argint_nou, ramuri_aur_nou, ramuri_rubin_nou&lt;br /&gt;
&lt;br /&gt;
        zi += 1&lt;br /&gt;
&lt;br /&gt;
    return ramuri_argint, ramuri_aur, ramuri_rubin&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    n = int(input(&amp;quot;Introduceți numărul n (0 ≤ n ≤ 45): &amp;quot;))&lt;br /&gt;
    rezultate = calculeaza_ramuri_copac(n)&lt;br /&gt;
    if rezultate:&lt;br /&gt;
        print(*rezultate)  # Afiseaza cele trei numere separate printr-un spatiu&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0968_-_Copac&amp;diff=7706</id>
		<title>0968 - Copac</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0968_-_Copac&amp;diff=7706"/>
		<updated>2023-12-09T20:27:27Z</updated>

		<summary type="html">&lt;p&gt;Gabii: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunț ==&lt;br /&gt;
În grădina din palatul lui Făt-Frumos a răsărit tulpina fragedă a unui copăcel. Impresionat de gingăşia lui, Făt-Frumos dădu fuga la izvorul fermecat şi aduse nişte apă vie cu care udă copăcelul.&lt;br /&gt;
&lt;br /&gt;
A doua zi, surpriză mare! Copăcelului i-au crescut trei ramuri minunate: una de argint, una de aur şi alta de rubin. Făt-Frumos, fericit, dădu din nou fuga la izvorul fermecat şi aduse apă vie pentru copăcel.&lt;br /&gt;
&lt;br /&gt;
A treia zi, surpriză şi mai mare! Ramura de argint s-a transformat în trei ramuri noi: una de argint, una de aur şi una de rubin. Ramura de aur s-a transformat în două ramuri noi: una de argint şi alta de rubin. Ramura de rubin s-a transformat în două ramuri noi: una de aur şi una de rubin.&lt;br /&gt;
&lt;br /&gt;
Şi în a patra zi, Făt-Frumos observă că fiecare ramură de argint s-a transformat în trei ramuri noi: una de argint, una de aur şi una de rubin; fiecare ramură de aur s-a transformat în două ramuri noi: una de argint şi alta de rubin; fiecare ramură de rubin s-a transformat în două ramuri noi: una de aur şi una de rubin.&lt;br /&gt;
&lt;br /&gt;
Copăcelul era mai bogat şi mai frumos. Strălucea ca un soare, lumina lui ajungând până la palatul Zmeului-Zmeilor.&lt;br /&gt;
&lt;br /&gt;
Zmeul-Zmeilor se îndreptă ca fulgerul spre palatul lui Făt-Frumos. Vroia copacul. Dar cum să facă? Dacă s-ar lupta cu Făt-Frumos, ar pierde lupta. Mereu s-a întâmplat aşa. Se gândi, se gândi… şi exact când a ajuns în faţa lui Făt-Frumos i-a venit o idee spunându-i acestuia:&lt;br /&gt;
&lt;br /&gt;
- Făt-Frumos, dacă îmi vei spune câte ramuri de argint, câte ramuri de aur şi câte ramuri de rubin va avea copacul peste &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; zile începând din ziua asta, atunci copacul va rămâne al tău. De nu, al meu va fi!&lt;br /&gt;
&lt;br /&gt;
Ştiind că ramurile copacului se transformă şi în zilele următoare la fel ca în ziua a patra, ajutaţi-l pe Făt-Frumos să găsească răspunsul la întrebare astfel încât copacul să rămână al lui.&lt;br /&gt;
&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Scrieţi un program care citeşte un număr natural &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; şi care să determine şi să afişeze trei numere naturale reprezentând numărul de ramuri de argint, respectiv de aur şi de rubin pe care le va avea copacul peste &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; zile, în acestă ordine.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul va afișa pe ecran cele trei numere, în ordinea cerută, separate prin exact un spațiu.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;0 ≤ n ≤ 45&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
&amp;lt;code&amp;gt;Copacul va avea peste n=2 zile: 20 ramuri de argint, 25 ramuri de aur, 36 ramuri de rubin&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
Intrare  2&lt;br /&gt;
&lt;br /&gt;
Ieșire 20 25 36&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
Intrare 46&lt;br /&gt;
&lt;br /&gt;
Ieșire Numărul introdus nu respectă restricțiile (0 ≤ n ≤ 45).&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def verifica_restrictii(n):&lt;br /&gt;
    return 0 &amp;lt;= n &amp;lt;= 45&lt;br /&gt;
&lt;br /&gt;
def calculeaza_ramuri_copac(n):&lt;br /&gt;
    if not verifica_restrictii(n):&lt;br /&gt;
        print(&amp;quot;Numărul introdus nu respectă restricțiile (0 ≤ n ≤ 45).&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    if n == 0:&lt;br /&gt;
        return 4, 5, 7&lt;br /&gt;
&lt;br /&gt;
    ramuri_argint = 4&lt;br /&gt;
    ramuri_aur = 5&lt;br /&gt;
    ramuri_rubin = 7&lt;br /&gt;
&lt;br /&gt;
    zi = 1&lt;br /&gt;
&lt;br /&gt;
    while zi &amp;lt;= n:&lt;br /&gt;
        ramuri_argint_nou = ramuri_argint + ramuri_aur&lt;br /&gt;
        ramuri_aur_nou = ramuri_argint + ramuri_rubin&lt;br /&gt;
        ramuri_rubin_nou = ramuri_argint + ramuri_aur + ramuri_rubin&lt;br /&gt;
&lt;br /&gt;
        ramuri_argint, ramuri_aur, ramuri_rubin = ramuri_argint_nou, ramuri_aur_nou, ramuri_rubin_nou&lt;br /&gt;
&lt;br /&gt;
        zi += 1&lt;br /&gt;
&lt;br /&gt;
    return ramuri_argint, ramuri_aur, ramuri_rubin&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    n = int(input(&amp;quot;Introduceți numărul n (0 ≤ n ≤ 45): &amp;quot;))&lt;br /&gt;
    rezultate = calculeaza_ramuri_copac(n)&lt;br /&gt;
    if rezultate:&lt;br /&gt;
        print(*rezultate)  # Afiseaza cele trei numere separate printr-un spatiu&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0806_-_Generare_sir&amp;diff=7705</id>
		<title>0806 - Generare sir</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0806_-_Generare_sir&amp;diff=7705"/>
		<updated>2023-12-09T20:24:07Z</updated>

		<summary type="html">&lt;p&gt;Gabii: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerinţa==&lt;br /&gt;
Se consideră şirul definit mai jos:&lt;br /&gt;
&lt;br /&gt;
fn= 1  daca n =1 &lt;br /&gt;
&lt;br /&gt;
fn= 1 + f(n-1)  daca n e par&lt;br /&gt;
&lt;br /&gt;
fn= 1 + 2*f(n-2)  dacă n altfel&lt;br /&gt;
&lt;br /&gt;
în care nu există doi termeni cu aceeași paritate aflați pe poziții consecutive: &amp;lt;code&amp;gt;1, 2, 3, 4, 7, 8, 15, 16 ....&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Pentru un număr natural &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, termen al şirului dat, se cere să se afișeze pe ecran, în ordine strict descrescătoare, separați prin câte un spațiu, toţi termenii şirului care sunt mai mici sau egali cu &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Programul citeşte de la tastatură numărul &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Date de ieşire==&lt;br /&gt;
Programul va afişa pe ecran în ordine strict descrescătoare, separați prin câte un spațiu, toţi termenii şirului care sunt mai mici sau egali cu &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Restricţii şi precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ x ≤ 1.000.000.000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1==&lt;br /&gt;
Date intrare &lt;br /&gt;
 15&lt;br /&gt;
Date iesire &lt;br /&gt;
 15 8 7 4 3 2 1&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2==&lt;br /&gt;
Date intrare &lt;br /&gt;
 0&lt;br /&gt;
Cerința&lt;br /&gt;
 Numărul introdus nu respectă restricțiile.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
def verifica_restrictii(x):&lt;br /&gt;
    return 1 &amp;lt;= x &amp;lt;= 1000000000&lt;br /&gt;
&lt;br /&gt;
def genereaza_si_afiseaza_sir(x):&lt;br /&gt;
    def f(n):&lt;br /&gt;
        if n == 1:&lt;br /&gt;
            return 1&lt;br /&gt;
        elif n % 2 == 0:&lt;br /&gt;
            return 1 + f(n - 1)&lt;br /&gt;
        else:&lt;br /&gt;
            return 1 + 2 * f(n - 2)&lt;br /&gt;
&lt;br /&gt;
    termeni_sir = []&lt;br /&gt;
&lt;br /&gt;
    # Generăm șirul până când obținem un termen mai mare decât x&lt;br /&gt;
    n = 1&lt;br /&gt;
    while f(n) &amp;lt;= x:&lt;br /&gt;
        termeni_sir.append(f(n))&lt;br /&gt;
        n += 1&lt;br /&gt;
&lt;br /&gt;
    # Afișăm termenii în ordine descrescătoare&lt;br /&gt;
    termeni_sir.sort(reverse=True)&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot; &amp;quot;.join(map(str, termeni_sir)))&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    x = int(input(&amp;quot;Introduceți numărul x: &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    if verifica_restrictii(x):&lt;br /&gt;
        genereaza_si_afiseaza_sir(x)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Numărul introdus nu respectă restricțiile.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0091_-_Masini&amp;diff=7657</id>
		<title>0091 - Masini</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0091_-_Masini&amp;diff=7657"/>
		<updated>2023-12-04T22:54:26Z</updated>

		<summary type="html">&lt;p&gt;Gabii: Pagină nouă: == Enunț == În curtea unui atelier de reparaţii auto, sunt &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; maşini care trebuie sa fie reparate. Deoarece nu sunt suficienţi mecanici, în fiecare moment de timp se poate lucra doar la o singură maşină.  = Cerinţa = Cunoscând timpul necesar pentru repararea fiecărei maşini, scrieţi un program care calculează numărul maxim de maşini care pot fi reparate într-un interval de timp &amp;lt;code&amp;gt;T&amp;lt;/code&amp;gt;.  = Date de intrare = Pe prima linie a fişierului &amp;lt;co...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunț ==&lt;br /&gt;
În curtea unui atelier de reparaţii auto, sunt &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; maşini care trebuie sa fie reparate. Deoarece nu sunt suficienţi mecanici, în fiecare moment de timp se poate lucra doar la o singură maşină.&lt;br /&gt;
&lt;br /&gt;
= Cerinţa =&lt;br /&gt;
Cunoscând timpul necesar pentru repararea fiecărei maşini, scrieţi un program care calculează numărul maxim de maşini care pot fi reparate într-un interval de timp &amp;lt;code&amp;gt;T&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Pe prima linie a fişierului &amp;lt;code&amp;gt;masiniIN.txt&amp;lt;/code&amp;gt; se găsesc două numere naturale &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;T&amp;lt;/code&amp;gt; separate printr-un singur spaţiu, reprezentând numărul de maşini din curtea atelierului auto şi timpul total în care se va lucra.&lt;br /&gt;
&lt;br /&gt;
Pe linia a doua, separate prin câte un spaţiu, se găsesc &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere naturale &amp;lt;code&amp;gt;t1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;t2&amp;lt;/code&amp;gt;, …, &amp;lt;code&amp;gt;tn&amp;lt;/code&amp;gt;, reprezentând timpii necesari pentru repararea fiecărei maşini.&lt;br /&gt;
&lt;br /&gt;
= Date de ieşire =&lt;br /&gt;
Pe prima linie a fişierului &amp;lt;code&amp;gt;masiniOUT.txt&amp;lt;/code&amp;gt;se va găsi un număr natural &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;, reprezentând numărul maxim de maşini care pot fi reparate.&lt;br /&gt;
&lt;br /&gt;
= Restricţii şi precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 &amp;lt; n, T &amp;lt;= 1000&amp;lt;/code&amp;gt;&lt;br /&gt;
* numerele de pe a doua linie a fişierului de intrare vor fi mai mici sau egale cu &amp;lt;code&amp;gt;100&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
&amp;lt;code&amp;gt;masiniIN.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 5 10&lt;br /&gt;
 6 2 4 8 2 &lt;br /&gt;
&amp;lt;code&amp;gt;masiniOUT.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 3&lt;br /&gt;
&lt;br /&gt;
= Exemplul 2 =&lt;br /&gt;
&amp;lt;code&amp;gt;masiniIN.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 5 10000&lt;br /&gt;
 6 2 4 8 2 &lt;br /&gt;
consola&lt;br /&gt;
 Eroare: Nu corespunde restricțiilor   &lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
def numar_maxim_masini(n, T, timp_reparare):&lt;br /&gt;
    # Sortează timpurile de reparare în ordine crescătoare&lt;br /&gt;
    timp_reparare.sort()&lt;br /&gt;
&lt;br /&gt;
    masini_reparate = 0&lt;br /&gt;
    timp_total = 0&lt;br /&gt;
&lt;br /&gt;
    # Parcurge mașinile și adaugă timpul de reparare la timp_total&lt;br /&gt;
    for timp in timp_reparare:&lt;br /&gt;
        if timp_total + timp &amp;lt;= T:&lt;br /&gt;
            masini_reparate += 1&lt;br /&gt;
            timp_total += timp&lt;br /&gt;
        else:&lt;br /&gt;
            break&lt;br /&gt;
&lt;br /&gt;
    return masini_reparate&lt;br /&gt;
&lt;br /&gt;
def citeste_date_intrare(nume_fisier):&lt;br /&gt;
    if not os.path.exists(nume_fisier):&lt;br /&gt;
        raise FileNotFoundError(f&amp;quot;Fișierul {nume_fisier} nu a fost găsit.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    with open(nume_fisier, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        # Citire n și T&lt;br /&gt;
        n, T = map(int, f.readline().split())&lt;br /&gt;
&lt;br /&gt;
        # Verificare restricții pentru n și T&lt;br /&gt;
        if not (1 &amp;lt;= n &amp;lt;= 1000 and 1 &amp;lt;= T &amp;lt;= 1000):&lt;br /&gt;
            raise ValueError(&amp;quot;Nu corespunde restricțiilor&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        # Citire și verificare timp_reparare&lt;br /&gt;
        timp_reparare = list(map(int, f.readline().split()))&lt;br /&gt;
        if any(timp &amp;gt; 100 for timp in timp_reparare):&lt;br /&gt;
            raise ValueError(&amp;quot;Nu corespunde restricțiilor&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    return n, T, timp_reparare&lt;br /&gt;
&lt;br /&gt;
# Citire date de intrare și verificare restricții&lt;br /&gt;
try:&lt;br /&gt;
    n, T, timp_reparare = citeste_date_intrare(&amp;quot;masiniIN.txt&amp;quot;)&lt;br /&gt;
except FileNotFoundError as e:&lt;br /&gt;
    print(f&amp;quot;Eroare: {str(e)}&amp;quot;)&lt;br /&gt;
    exit(1)&lt;br /&gt;
except ValueError as e:&lt;br /&gt;
    print(f&amp;quot;Eroare: {str(e)}&amp;quot;)&lt;br /&gt;
    exit(1)&lt;br /&gt;
&lt;br /&gt;
# Calculare rezultat&lt;br /&gt;
rezultat = numar_maxim_masini(n, T, timp_reparare)&lt;br /&gt;
&lt;br /&gt;
# Scriere rezultat în fișierul masiniOUT.txt&lt;br /&gt;
with open(&amp;quot;masiniOUT.txt&amp;quot;, &amp;quot;w&amp;quot;) as f_out:&lt;br /&gt;
    f_out.write(str(rezultat))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3689_-_2gen&amp;diff=7656</id>
		<title>3689 - 2gen</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3689_-_2gen&amp;diff=7656"/>
		<updated>2023-12-04T22:01:30Z</updated>

		<summary type="html">&lt;p&gt;Gabii: Pagină nouă:  = Cerința = Se &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; numere naturale. Afișați în ordine lexicografică toate șirurile de lungime &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; care conțin numere de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și fiecare valoare apare de maxim două ori.  = Date de intrare = Fișierul de intrare &amp;lt;code&amp;gt;2genIN.txt&amp;lt;/code&amp;gt; conține pe prima linie numerele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; separate prin spațiu.  = Date de ieșire = Fișierul de ieșire &amp;lt;code&amp;gt;2genOUT.txt&amp;lt;/code&amp;gt; va con...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Cerința =&lt;br /&gt;
Se &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; numere naturale. Afișați în ordine lexicografică toate șirurile de lungime &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; care conțin numere de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și fiecare valoare apare de maxim două ori.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;2genIN.txt&amp;lt;/code&amp;gt; conține pe prima linie numerele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; separate prin spațiu.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fișierul de ieșire &amp;lt;code&amp;gt;2genOUT.txt&amp;lt;/code&amp;gt; va conține câte o soluție pe linie. Numerele de pe aceeași linie se separă prin spații. În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul &amp;quot;Nu corespunde restricțiilor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 6&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ m ≤ 6&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
&amp;lt;code&amp;gt;2genIN.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 4 3&lt;br /&gt;
&amp;lt;code&amp;gt;2genOUT.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 1 1 2 &lt;br /&gt;
 1 1 3 &lt;br /&gt;
 1 1 4 &lt;br /&gt;
 1 2 1 &lt;br /&gt;
 1 2 2 &lt;br /&gt;
 1 2 3 &lt;br /&gt;
 1 2 4 &lt;br /&gt;
 1 3 1 &lt;br /&gt;
 1 3 2 &lt;br /&gt;
 1 3 3 &lt;br /&gt;
 1 3 4 &lt;br /&gt;
 1 4 1 &lt;br /&gt;
 1 4 2 &lt;br /&gt;
 1 4 3 &lt;br /&gt;
 1 4 4 &lt;br /&gt;
 2 1 1 &lt;br /&gt;
 2 1 2 &lt;br /&gt;
 2 1 3 &lt;br /&gt;
 2 1 4 &lt;br /&gt;
 2 2 1 &lt;br /&gt;
 2 2 3 &lt;br /&gt;
 2 2 4 &lt;br /&gt;
 2 3 1 &lt;br /&gt;
 2 3 2 &lt;br /&gt;
 2 3 3 &lt;br /&gt;
 2 3 4 &lt;br /&gt;
 2 4 1 &lt;br /&gt;
 2 4 2 &lt;br /&gt;
 2 4 3 &lt;br /&gt;
 2 4 4 &lt;br /&gt;
 3 1 1 &lt;br /&gt;
 3 1 2 &lt;br /&gt;
 3 1 3 &lt;br /&gt;
 3 1 4 &lt;br /&gt;
 3 2 1 &lt;br /&gt;
 3 2 2 &lt;br /&gt;
 3 2 3 &lt;br /&gt;
 3 2 4 &lt;br /&gt;
 3 3 1 &lt;br /&gt;
 3 3 2 &lt;br /&gt;
 3 3 4 &lt;br /&gt;
 3 4 1 &lt;br /&gt;
 3 4 2 &lt;br /&gt;
 3 4 3 &lt;br /&gt;
 3 4 4 &lt;br /&gt;
 4 1 1 &lt;br /&gt;
 4 1 2 &lt;br /&gt;
 4 1 3 &lt;br /&gt;
 4 1 4 &lt;br /&gt;
 4 2 1 &lt;br /&gt;
 4 2 2 &lt;br /&gt;
 4 2 3 &lt;br /&gt;
 4 2 4 &lt;br /&gt;
 4 3 1 &lt;br /&gt;
 4 3 2 &lt;br /&gt;
 4 3 3 &lt;br /&gt;
 4 3 4 &lt;br /&gt;
 4 4 1 &lt;br /&gt;
 4 4 2 &lt;br /&gt;
 4 4 3 &lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
&amp;lt;code&amp;gt;2genIN.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 7 7 &lt;br /&gt;
consola&lt;br /&gt;
 Nu corespunde restricțiilor&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def genereaza_siruri(n, m):&lt;br /&gt;
    def backtracking(sir_partial):&lt;br /&gt;
        if len(sir_partial) == m:&lt;br /&gt;
            solutii.append(sir_partial.copy())&lt;br /&gt;
            return&lt;br /&gt;
&lt;br /&gt;
        for numar in range(1, n + 1):&lt;br /&gt;
            if folosit[numar] &amp;lt; 2:&lt;br /&gt;
                sir_partial.append(numar)&lt;br /&gt;
                folosit[numar] += 1&lt;br /&gt;
&lt;br /&gt;
                backtracking(sir_partial)&lt;br /&gt;
&lt;br /&gt;
                sir_partial.pop()&lt;br /&gt;
                folosit[numar] -= 1&lt;br /&gt;
&lt;br /&gt;
    solutii = []&lt;br /&gt;
    folosit = {numar: 0 for numar in range(1, n + 1)}&lt;br /&gt;
    backtracking([])&lt;br /&gt;
&lt;br /&gt;
    return solutii&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    # Citire date de intrare&lt;br /&gt;
    with open(&amp;quot;2genIN.txt&amp;quot;, &amp;quot;r&amp;quot;) as fisier_intrare:&lt;br /&gt;
        n, m = map(int, fisier_intrare.readline().split())&lt;br /&gt;
&lt;br /&gt;
    # Verificare restricții&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 6 and 1 &amp;lt;= m &amp;lt;= 6):&lt;br /&gt;
        print(&amp;quot;Nu corespunde restricțiilor&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    # Generare șiruri&lt;br /&gt;
    siruri = genereaza_siruri(n, m)&lt;br /&gt;
&lt;br /&gt;
    # Scriere rezultate în fișierul de ieșire&lt;br /&gt;
    with open(&amp;quot;2genOUT.txt&amp;quot;, &amp;quot;w&amp;quot;) as fisier_iesire:&lt;br /&gt;
        if siruri:&lt;br /&gt;
            for sir in siruri:&lt;br /&gt;
                fisier_iesire.write(&amp;quot; &amp;quot;.join(map(str, sir)) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            fisier_iesire.write(&amp;quot;Nu corespunde restricțiilor\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1288_-_CifreGen1&amp;diff=7654</id>
		<title>1288 - CifreGen1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1288_-_CifreGen1&amp;diff=7654"/>
		<updated>2023-12-04T21:23:38Z</updated>

		<summary type="html">&lt;p&gt;Gabii: Pagină nouă: = Cerința = Se dau două numere &amp;lt;code&amp;gt;n m&amp;lt;/code&amp;gt;. Să se genereze toate numerele cu exact &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; cifre mai mici decât &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;.  = Date de intrare = Programul citește de la tastatură numerele &amp;lt;code&amp;gt;n m&amp;lt;/code&amp;gt;.  = Date de ieșire = Programul va afișa pe ecran numerele generate, câte unul pe linie, în ordine crescătoare. În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul &amp;quot;Nu corespunde restricțiilor&amp;quot;.  = Restricții și precizări...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cerința =&lt;br /&gt;
Se dau două numere &amp;lt;code&amp;gt;n m&amp;lt;/code&amp;gt;. Să se genereze toate numerele cu exact &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; cifre mai mici decât &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Programul citește de la tastatură numerele &amp;lt;code&amp;gt;n m&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Programul va afișa pe ecran numerele generate, câte unul pe linie, în ordine crescătoare. În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul &amp;quot;Nu corespunde restricțiilor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 7&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;0 &amp;lt; m &amp;lt; 6&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
Intrare&lt;br /&gt;
 3 2&lt;br /&gt;
Ieșire&lt;br /&gt;
 100&lt;br /&gt;
 101&lt;br /&gt;
 110&lt;br /&gt;
 111&lt;br /&gt;
&lt;br /&gt;
= Exemplul 2 =&lt;br /&gt;
Intrare&lt;br /&gt;
 12 14&lt;br /&gt;
consola&lt;br /&gt;
 &amp;quot;Nu corespunde restricțiilor&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def verifica_restrictii(n, m):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Verifică dacă valorile lui n și m satisfac restricțiile.&lt;br /&gt;
    &lt;br /&gt;
    :param n: Numărul de cifre dorit în numerele generate&lt;br /&gt;
    :param m: Limita superioară pentru cifrele din numere&lt;br /&gt;
    :return: True dacă restricțiile sunt îndeplinite, False în caz contrar&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return 1 &amp;lt;= n &amp;lt;= 7 and 0 &amp;lt; m &amp;lt; 10&lt;br /&gt;
&lt;br /&gt;
def genereaza_numere_backtracking(n, m, numar_curent=0):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Generează și afișează numerele cu exact n cifre, unde fiecare cifră este strict mai mică decât m, folosind backtracking.&lt;br /&gt;
    &lt;br /&gt;
    :param n: Numărul de cifre dorit în numerele generate&lt;br /&gt;
    :param m: Limita superioară pentru cifrele din numere&lt;br /&gt;
    :param numar_curent: Numărul curent construit prin adăugarea de cifre&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    if n == 0:&lt;br /&gt;
        print(numar_curent)&lt;br /&gt;
        return&lt;br /&gt;
    for cifra in range(m):&lt;br /&gt;
        if numar_curent == 0 and cifra == 0:&lt;br /&gt;
            continue  # Evităm să începem cu zero pentru a păstra exact n cifre&lt;br /&gt;
        genereaza_numere_backtracking(n - 1, m, numar_curent * 10 + cifra)&lt;br /&gt;
&lt;br /&gt;
# Citirea datelor de intrare&lt;br /&gt;
n, m = map(int, input(&amp;quot;Introduceți n și m, separate prin spațiu: &amp;quot;).split())&lt;br /&gt;
&lt;br /&gt;
# Verificarea restricțiilor&lt;br /&gt;
if verifica_restrictii(n, m):&lt;br /&gt;
    # Apelul funcției pentru a începe generarea&lt;br /&gt;
    genereaza_numere_backtracking(n, m)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;Nu corespunde restricțiilor. Introduceți valori valide pentru n și m.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1287_-_CifreGen&amp;diff=7653</id>
		<title>1287 - CifreGen</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1287_-_CifreGen&amp;diff=7653"/>
		<updated>2023-12-04T21:05:39Z</updated>

		<summary type="html">&lt;p&gt;Gabii: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cerința =&lt;br /&gt;
Se dau două cifre &amp;lt;code&amp;gt;a b&amp;lt;/code&amp;gt; și un număr &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;. Să se genereze toate numerele cu exact &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; cifre cuprinse între &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Programul citește de la tastatură numerele &amp;lt;code&amp;gt;a b n&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Programul va afișa pe ecran numerele generate, câte unul pe linie, în ordine crescătoare. În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul &amp;quot;Nu corespunde restricțiilor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 8&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;0 &amp;lt; a &amp;lt; b &amp;lt; 10&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
Intrare&lt;br /&gt;
 3 5 3&lt;br /&gt;
Ieșire&lt;br /&gt;
 333&lt;br /&gt;
 334&lt;br /&gt;
 335&lt;br /&gt;
 343&lt;br /&gt;
 344&lt;br /&gt;
 345&lt;br /&gt;
 353&lt;br /&gt;
 354&lt;br /&gt;
 355&lt;br /&gt;
 433&lt;br /&gt;
 434&lt;br /&gt;
 435&lt;br /&gt;
 443&lt;br /&gt;
 444&lt;br /&gt;
 445&lt;br /&gt;
 453&lt;br /&gt;
 454&lt;br /&gt;
 455&lt;br /&gt;
 533&lt;br /&gt;
 534&lt;br /&gt;
 535&lt;br /&gt;
 543&lt;br /&gt;
 544&lt;br /&gt;
 545&lt;br /&gt;
 553&lt;br /&gt;
 554&lt;br /&gt;
 555&lt;br /&gt;
&lt;br /&gt;
= Exemplul 2 =&lt;br /&gt;
Intrare&lt;br /&gt;
 5 3 10&lt;br /&gt;
consola&lt;br /&gt;
 &amp;quot;Nu corespunde restricțiilor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def validate_restrictions(a, b, n):&lt;br /&gt;
    if 1 &amp;lt;= n &amp;lt;= 8 and 0 &amp;lt; a &amp;lt; b &amp;lt; 10:&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Nu corespunde restricțiilor&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
# Citirea datelor de intrare&lt;br /&gt;
a = int(input(&amp;quot;Introduceți a: &amp;quot;))&lt;br /&gt;
b = int(input(&amp;quot;Introduceți b: &amp;quot;))&lt;br /&gt;
n = int(input(&amp;quot;Introduceți n: &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
# Validarea restricțiilor&lt;br /&gt;
if validate_restrictions(a, b, n):&lt;br /&gt;
    # Generarea și afișarea numerelor&lt;br /&gt;
    def generate_numbers(current_number, remaining_digits):&lt;br /&gt;
        if remaining_digits == 0:&lt;br /&gt;
            print(current_number)&lt;br /&gt;
            return&lt;br /&gt;
        for digit in range(a, b+1):&lt;br /&gt;
            generate_numbers(current_number * 10 + digit, remaining_digits - 1)&lt;br /&gt;
&lt;br /&gt;
    for starting_digit in range(a, b+1):  &lt;br /&gt;
        generate_numbers(starting_digit, n - 1)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1287_-_CifreGen&amp;diff=7652</id>
		<title>1287 - CifreGen</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1287_-_CifreGen&amp;diff=7652"/>
		<updated>2023-12-04T21:04:51Z</updated>

		<summary type="html">&lt;p&gt;Gabii: Pagină nouă: = Cerința = Se dau două cifre &amp;lt;code&amp;gt;a b&amp;lt;/code&amp;gt; și un număr &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;. Să se genereze toate numerele cu exact &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; cifre cuprinse între &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt;.  = Date de intrare = Programul citește de la tastatură numerele &amp;lt;code&amp;gt;a b n&amp;lt;/code&amp;gt;.  = Date de ieșire = Programul va afișa pe ecran numerele generate, câte unul pe linie, în ordine crescătoare. În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul &amp;quot;Nu corespun...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cerința =&lt;br /&gt;
Se dau două cifre &amp;lt;code&amp;gt;a b&amp;lt;/code&amp;gt; și un număr &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;. Să se genereze toate numerele cu exact &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; cifre cuprinse între &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Programul citește de la tastatură numerele &amp;lt;code&amp;gt;a b n&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Programul va afișa pe ecran numerele generate, câte unul pe linie, în ordine crescătoare. În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul &amp;quot;Nu corespunde restricțiilor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 8&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;0 &amp;lt; a &amp;lt; b &amp;lt; 10&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
Intrare&lt;br /&gt;
 3 5 3&lt;br /&gt;
Ieșire&lt;br /&gt;
 333&lt;br /&gt;
 334&lt;br /&gt;
 335&lt;br /&gt;
 343&lt;br /&gt;
 344&lt;br /&gt;
 345&lt;br /&gt;
 353&lt;br /&gt;
 354&lt;br /&gt;
 355&lt;br /&gt;
 433&lt;br /&gt;
 434&lt;br /&gt;
 435&lt;br /&gt;
 443&lt;br /&gt;
 444&lt;br /&gt;
 445&lt;br /&gt;
 453&lt;br /&gt;
 454&lt;br /&gt;
 455&lt;br /&gt;
 533&lt;br /&gt;
 534&lt;br /&gt;
 535&lt;br /&gt;
 543&lt;br /&gt;
 544&lt;br /&gt;
 545&lt;br /&gt;
 553&lt;br /&gt;
 554&lt;br /&gt;
 555&lt;br /&gt;
&lt;br /&gt;
= Exemplul 2 =&lt;br /&gt;
Intrare&lt;br /&gt;
 3 5 3&lt;br /&gt;
consola&lt;br /&gt;
 &amp;quot;Nu corespunde restricțiilor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def validate_restrictions(a, b, n):&lt;br /&gt;
    if 1 &amp;lt;= n &amp;lt;= 8 and 0 &amp;lt; a &amp;lt; b &amp;lt; 10:&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Nu corespunde restricțiilor&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
# Citirea datelor de intrare&lt;br /&gt;
a = int(input(&amp;quot;Introduceți a: &amp;quot;))&lt;br /&gt;
b = int(input(&amp;quot;Introduceți b: &amp;quot;))&lt;br /&gt;
n = int(input(&amp;quot;Introduceți n: &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
# Validarea restricțiilor&lt;br /&gt;
if validate_restrictions(a, b, n):&lt;br /&gt;
    # Generarea și afișarea numerelor&lt;br /&gt;
    def generate_numbers(current_number, remaining_digits):&lt;br /&gt;
        if remaining_digits == 0:&lt;br /&gt;
            print(current_number)&lt;br /&gt;
            return&lt;br /&gt;
        for digit in range(a, b+1):&lt;br /&gt;
            generate_numbers(current_number * 10 + digit, remaining_digits - 1)&lt;br /&gt;
&lt;br /&gt;
    for starting_digit in range(a, b+1):  &lt;br /&gt;
        generate_numbers(starting_digit, n - 1)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0201_-_SubmDiv&amp;diff=7651</id>
		<title>0201 - SubmDiv</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0201_-_SubmDiv&amp;diff=7651"/>
		<updated>2023-12-04T20:11:41Z</updated>

		<summary type="html">&lt;p&gt;Gabii: Pagină nouă: = Cerinţa = Să se determine toate submulţimile cu &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; elemente ale mulţimii divizorilor unui număr natural &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; dat.  = Date de intrare = Fişierul de intrare &amp;lt;code&amp;gt;submdivIN.txt&amp;lt;/code&amp;gt; conţine pe prima linie numerele &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;,cu semnificaţia din enunţ.  = Date de ieşire = Fişierul de ieşire &amp;lt;code&amp;gt;submdivOUT.txt&amp;lt;/code&amp;gt; va conţine pe fiecare linie câte o submulţime determinată. Aceste submulţimi for fi afişate în...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cerinţa =&lt;br /&gt;
Să se determine toate submulţimile cu &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; elemente ale mulţimii divizorilor unui număr natural &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; dat.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fişierul de intrare &amp;lt;code&amp;gt;submdivIN.txt&amp;lt;/code&amp;gt; conţine pe prima linie numerele &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;,cu semnificaţia din enunţ.&lt;br /&gt;
&lt;br /&gt;
= Date de ieşire =&lt;br /&gt;
Fişierul de ieşire &amp;lt;code&amp;gt;submdivOUT.txt&amp;lt;/code&amp;gt; va conţine pe fiecare linie câte o submulţime determinată. Aceste submulţimi for fi afişate în ordine lexicografică. Pentru fiecare submulţime se vor afişa elementele în ordine crescătoare, separate printr-un spaţiu. În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul &amp;quot;Nu corespunde restricțiilor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= Restricţii şi precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ m ≤ 6&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ x ≤ 1000&amp;lt;/code&amp;gt;&lt;br /&gt;
* dacă nu există soluţie, pe prima linie a fişierului &amp;lt;code&amp;gt;submdivOUT.txt&amp;lt;/code&amp;gt; se va afişa mesajul &amp;lt;code&amp;gt;fara solutie&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
&amp;lt;code&amp;gt;submdivIN.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 45 4&lt;br /&gt;
&amp;lt;code&amp;gt;submdivOUT.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 1 3 5 9 &lt;br /&gt;
 1 3 5 15 &lt;br /&gt;
 1 3 5 45 &lt;br /&gt;
 1 3 9 15 &lt;br /&gt;
 1 3 9 45 &lt;br /&gt;
 1 3 15 45 &lt;br /&gt;
 1 5 9 15 &lt;br /&gt;
 1 5 9 45 &lt;br /&gt;
 1 5 15 45 &lt;br /&gt;
 1 9 15 45 &lt;br /&gt;
 3 5 9 15 &lt;br /&gt;
 3 5 9 45 &lt;br /&gt;
 3 5 15 45 &lt;br /&gt;
 3 9 15 45 &lt;br /&gt;
 5 9 15 45 &lt;br /&gt;
&lt;br /&gt;
= Exemplul 2 =&lt;br /&gt;
&amp;lt;code&amp;gt;submdivIN.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 45 4&lt;br /&gt;
&amp;lt;code&amp;gt;submdivOUT.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 Nu corespunde restrictiilor&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def verificare_restricții(x, m):&lt;br /&gt;
    if 1 &amp;lt;= m &amp;lt;= 6 and 1 &amp;lt;= x &amp;lt;= 1000:&lt;br /&gt;
        return True&lt;br /&gt;
    return False&lt;br /&gt;
&lt;br /&gt;
def genereaza_submultimi(arr, m, curent, index, rezultat):&lt;br /&gt;
    if m == 0:&lt;br /&gt;
        rezultat.append(curent.copy())&lt;br /&gt;
        return&lt;br /&gt;
    if index == len(arr):&lt;br /&gt;
        return&lt;br /&gt;
    curent.append(arr[index])&lt;br /&gt;
    genereaza_submultimi(arr, m - 1, curent, index + 1, rezultat)&lt;br /&gt;
    curent.pop()&lt;br /&gt;
    genereaza_submultimi(arr, m, curent, index + 1, rezultat)&lt;br /&gt;
&lt;br /&gt;
def divizori_submultime(x, m):&lt;br /&gt;
    divizori = [i for i in range(1, x + 1) if x % i == 0]&lt;br /&gt;
    rezultat = []&lt;br /&gt;
    genereaza_submultimi(divizori, m, [], 0, rezultat)&lt;br /&gt;
    return sorted(rezultat)  # Sortează submulțimile în ordine lexicografică&lt;br /&gt;
&lt;br /&gt;
def scrie_submultimi_in_fisier(submultimi, fisier_iesire):&lt;br /&gt;
    with open(fisier_iesire, &#039;w&#039;) as fisier:&lt;br /&gt;
        if not submultimi:&lt;br /&gt;
            fisier.write(&amp;quot;fara solutie\n&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            for submultime in submultimi:&lt;br /&gt;
                fisier.write(&amp;quot; &amp;quot;.join(map(str, submultime)) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    # Citirea datelor din fișierul de intrare&lt;br /&gt;
    with open(&amp;quot;submdivIN.txt&amp;quot;, &#039;r&#039;) as fisier_intrare:&lt;br /&gt;
        x, m = map(int, fisier_intrare.readline().split())&lt;br /&gt;
&lt;br /&gt;
    # Verificare restricții&lt;br /&gt;
    if not verificare_restricții(x, m):&lt;br /&gt;
        with open(&amp;quot;submdivOUT.txt&amp;quot;, &#039;w&#039;) as fisier_iesire:&lt;br /&gt;
            fisier_iesire.write(&amp;quot;Nu corespunde restrictiilor\n&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        # Generarea submulțimilor de divizori&lt;br /&gt;
        submultimi = divizori_submultime(x, m)&lt;br /&gt;
&lt;br /&gt;
        # Scrierea rezultatelor în fișierul de ieșire&lt;br /&gt;
        scrie_submultimi_in_fisier(submultimi, &amp;quot;submdivOUT.txt&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3160_-_cifre_c&amp;diff=7650</id>
		<title>3160 - cifre c</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3160_-_cifre_c&amp;diff=7650"/>
		<updated>2023-12-04T19:43:31Z</updated>

		<summary type="html">&lt;p&gt;Gabii: Pagină nouă: = Cerința = Se citesc un număr natural &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; având cifrele diferite două câte două și o cifră &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;. Afișați în ordine descrescătoare numerele formate din &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt; cifre distincte care se pot obține din cifrele lui &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și care au cifrele ordonate crescător.  = Date de intrare = Programul citește de la tastatură numele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;.  = Date de ieșire = Programul va afișa pe ecran numerele cerute, câte...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cerința =&lt;br /&gt;
Se citesc un număr natural &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; având cifrele diferite două câte două și o cifră &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;. Afișați în ordine descrescătoare numerele formate din &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt; cifre distincte care se pot obține din cifrele lui &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și care au cifrele ordonate crescător.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Programul citește de la tastatură numele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Programul va afișa pe ecran numerele cerute, câte unul pe fiecare rând. În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul &amp;quot;Nu corespunde restricțiilor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 1.000.000.000&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;1 &amp;lt; c &amp;lt; 9&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; are cifrele distincte&lt;br /&gt;
* &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt; este mai mic decât numărul de cifre ale lui &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
Intrare&lt;br /&gt;
 4618 3&lt;br /&gt;
Ieșire&lt;br /&gt;
 468&lt;br /&gt;
 168&lt;br /&gt;
 148&lt;br /&gt;
 146&lt;br /&gt;
&lt;br /&gt;
= Exemplul 2 =&lt;br /&gt;
Intrare&lt;br /&gt;
 4618 3&lt;br /&gt;
consola&lt;br /&gt;
 &amp;quot;Nu corespunde restricțiilor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def verifica_restricții(n, c):&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 1000000000 and 1 &amp;lt; c &amp;lt; 9):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    cifre_n = set(str(n))&lt;br /&gt;
    return len(cifre_n) == len(str(n)) and c &amp;lt; len(cifre_n)&lt;br /&gt;
&lt;br /&gt;
def genereaza_numere(n, c):&lt;br /&gt;
    cifre_n = sorted(str(n))&lt;br /&gt;
    rezultat = []&lt;br /&gt;
&lt;br /&gt;
    def backtrack(start, path):&lt;br /&gt;
        if len(path) == c:&lt;br /&gt;
            rezultat.append(int(&#039;&#039;.join(path)))&lt;br /&gt;
            return&lt;br /&gt;
&lt;br /&gt;
        for i in range(start, len(cifre_n)):&lt;br /&gt;
            backtrack(i + 1, path + [cifre_n[i]])&lt;br /&gt;
&lt;br /&gt;
    backtrack(0, [])&lt;br /&gt;
    return rezultat&lt;br /&gt;
&lt;br /&gt;
# Citirea datelor de intrare&lt;br /&gt;
try:&lt;br /&gt;
    n, c = input(&amp;quot;Introduceți un număr natural n și un număr c (separate prin spațiu): &amp;quot;).split()&lt;br /&gt;
    n = int(n)&lt;br /&gt;
    c = int(c)&lt;br /&gt;
&lt;br /&gt;
    if verifica_restricții(n, c):&lt;br /&gt;
        rezultate = genereaza_numere(n, c)&lt;br /&gt;
&lt;br /&gt;
        if rezultate:&lt;br /&gt;
            print(&amp;quot;Numerele cerute (ordonate descrescător):&amp;quot;)&lt;br /&gt;
            for rezultat in sorted(rezultate, reverse=True):&lt;br /&gt;
                print(rezultat)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Nu există numere conform cerințelor.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Nu corespunde restricțiilor.&amp;quot;)&lt;br /&gt;
except ValueError:&lt;br /&gt;
    print(&amp;quot;Introduceți numere valide.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3247_-_subimp1&amp;diff=7649</id>
		<title>3247 - subimp1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3247_-_subimp1&amp;diff=7649"/>
		<updated>2023-12-04T19:36:20Z</updated>

		<summary type="html">&lt;p&gt;Gabii: Pagină nouă: = Cerința = Se citește un număr natural &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;. Afișați în ordine lexicografică toate submulțimile mulțimii &amp;lt;code&amp;gt;{1, 2, ..., n}&amp;lt;/code&amp;gt; care sunt formate dintr-un număr impar de elemente.  = Date de intrare = Programul citește de la tastatură numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;.  = Date de ieșire = Programul va afișa pe ecran submulțimile cerute, câte una pe fiecare rand și având elementele separate prin câte un spaţiu. În cazul în care restricțiile nu sunt...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cerința =&lt;br /&gt;
Se citește un număr natural &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;. Afișați în ordine lexicografică toate submulțimile mulțimii &amp;lt;code&amp;gt;{1, 2, ..., n}&amp;lt;/code&amp;gt; care sunt formate dintr-un număr impar de elemente.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Programul citește de la tastatură numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Programul va afișa pe ecran submulțimile cerute, câte una pe fiecare rand și având elementele separate prin câte un spaţiu. În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul &amp;quot;Nu corespunde restricțiilor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 19&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
Intrare&lt;br /&gt;
 4&lt;br /&gt;
Ieșire&lt;br /&gt;
 1 &lt;br /&gt;
 1 2 3 &lt;br /&gt;
 1 2 4 &lt;br /&gt;
 1 3 4 &lt;br /&gt;
 2 &lt;br /&gt;
 2 3 4 &lt;br /&gt;
 3 &lt;br /&gt;
 4&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
Intrare&lt;br /&gt;
 4&lt;br /&gt;
consola&lt;br /&gt;
 &amp;quot;Nu corespunde restricțiilor&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def verifica_restricții(n):&lt;br /&gt;
    return 1 &amp;lt;= n &amp;lt;= 19&lt;br /&gt;
&lt;br /&gt;
def generare_submultimi(curent, start, end, rezultat):&lt;br /&gt;
    if start &amp;gt; end:&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    for i in range(start, end + 1):&lt;br /&gt;
        curent.append(i)&lt;br /&gt;
        rezultat.append(list(curent))&lt;br /&gt;
        generare_submultimi(curent, i + 1, end, rezultat)&lt;br /&gt;
        curent.pop()&lt;br /&gt;
&lt;br /&gt;
def afisare_submultimi_impare(n):&lt;br /&gt;
    # Verificare restricții folosind funcția separată&lt;br /&gt;
    if verifica_restricții(n):&lt;br /&gt;
        submultimi = []&lt;br /&gt;
        generare_submultimi([], 1, n, submultimi)&lt;br /&gt;
&lt;br /&gt;
        print(&amp;quot;Submulțimile cu un număr impar de elemente:&amp;quot;)&lt;br /&gt;
        for submultime in submultimi:&lt;br /&gt;
            if len(submultime) % 2 == 1:&lt;br /&gt;
                print(*submultime)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Nu corespunde restricțiilor.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Citirea datelor de intrare&lt;br /&gt;
try:&lt;br /&gt;
    n = int(input(&amp;quot;Introduceți un număr natural n: &amp;quot;))&lt;br /&gt;
    afisare_submultimi_impare(n)&lt;br /&gt;
except ValueError:&lt;br /&gt;
    print(&amp;quot;Introduceți un număr valid.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3152_-_combinari2&amp;diff=7648</id>
		<title>3152 - combinari2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3152_-_combinari2&amp;diff=7648"/>
		<updated>2023-12-04T19:31:07Z</updated>

		<summary type="html">&lt;p&gt;Gabii: Pagină nouă:  = Cerința = Se citesc două numere naturale &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;. Afișați în ordine lexicografică toate submulțimile cu &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; elemente ale mulțimii &amp;lt;code&amp;gt;{1, 2, ..., n}&amp;lt;/code&amp;gt; în care nu există două elemente pare alăturate.  = Date de intrare = Programul citește de la tastatură numerele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;.  = Date de ieșire = Programul va afișa pe ecran submulțimile cerute, câte una pe fiecare rand și având elementele s...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Cerința =&lt;br /&gt;
Se citesc două numere naturale &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;. Afișați în ordine lexicografică toate submulțimile cu &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; elemente ale mulțimii &amp;lt;code&amp;gt;{1, 2, ..., n}&amp;lt;/code&amp;gt; în care nu există două elemente pare alăturate.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Programul citește de la tastatură numerele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Programul va afișa pe ecran submulțimile cerute, câte una pe fiecare rand și având elementele separate prin câte un spaţiu. În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul &amp;quot;Nu corespunde restricțiilor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ m &amp;lt; n ≤ 20&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
Intrare&lt;br /&gt;
 5 3&lt;br /&gt;
Ieșire&lt;br /&gt;
 1 2 3 &lt;br /&gt;
 1 2 5 &lt;br /&gt;
 1 3 4 &lt;br /&gt;
 1 3 5 &lt;br /&gt;
 1 4 5 &lt;br /&gt;
 2 3 4 &lt;br /&gt;
 2 3 5 &lt;br /&gt;
 3 4 5 &lt;br /&gt;
&lt;br /&gt;
= Exemplul 2 =&lt;br /&gt;
Intrare&lt;br /&gt;
 22 17&lt;br /&gt;
consola&lt;br /&gt;
 Nu corespunde restricțiilor&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def este_input_valid(n, m):&lt;br /&gt;
    return 1 &amp;lt;= m &amp;lt; n &amp;lt;= 20&lt;br /&gt;
&lt;br /&gt;
def este_submultime_valida(submultime):&lt;br /&gt;
    for i in range(len(submultime) - 1):&lt;br /&gt;
        if submultime[i] % 2 == 0 and submultime[i + 1] % 2 == 0:&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def genereaza_submultimi(n, m, submultime_curenta, index):&lt;br /&gt;
    if len(submultime_curenta) == m:&lt;br /&gt;
        if este_submultime_valida(submultime_curenta):&lt;br /&gt;
            print(*submultime_curenta)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    if index &amp;gt; n:&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    # Include elementul la index în submulțime&lt;br /&gt;
    genereaza_submultimi(n, m, submultime_curenta + [index], index + 1)&lt;br /&gt;
&lt;br /&gt;
    # Sări peste elementul la index&lt;br /&gt;
    genereaza_submultimi(n, m, submultime_curenta, index + 1)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n, m = map(int, input(&amp;quot;Introduceți valorile pentru n și m (separate prin spațiu): &amp;quot;).split())&lt;br /&gt;
&lt;br /&gt;
    if not este_input_valid(n, m):&lt;br /&gt;
        print(&amp;quot;Nu corespunde restricțiilor&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(f&amp;quot;Submulțimile cu {m} elemente ale mulțimii {{1, 2, ..., {n}}} în care nu există două elemente pare alăturate sunt:&amp;quot;)&lt;br /&gt;
        genereaza_submultimi(n, m, [], 1)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0204_-_Siruri&amp;diff=7647</id>
		<title>0204 - Siruri</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0204_-_Siruri&amp;diff=7647"/>
		<updated>2023-12-04T19:22:14Z</updated>

		<summary type="html">&lt;p&gt;Gabii: Pagină nouă:  = Cerinţa = Se citesc două numere naturale nenule &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;. Să se determine toate şirurile cu &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; elemente din mulţimea &amp;lt;code&amp;gt;{1,2,..,n}&amp;lt;/code&amp;gt;, ordonate strict crescător, cu proprietatea că oricare două elemente consecutive în şir au diferenţa mai mică sau egală cu cu &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;.  = Date de intrare = Fişierul de intrare &amp;lt;code&amp;gt;siruriIN.txt&amp;lt;/code&amp;gt; conţine pe prima linie numerele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;, separate...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Cerinţa =&lt;br /&gt;
Se citesc două numere naturale nenule &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;. Să se determine toate şirurile cu &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; elemente din mulţimea &amp;lt;code&amp;gt;{1,2,..,n}&amp;lt;/code&amp;gt;, ordonate strict crescător, cu proprietatea că oricare două elemente consecutive în şir au diferenţa mai mică sau egală cu cu &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fişierul de intrare &amp;lt;code&amp;gt;siruriIN.txt&amp;lt;/code&amp;gt; conţine pe prima linie numerele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;, separate printr-un spațiu.&lt;br /&gt;
&lt;br /&gt;
= Date de ieşire =&lt;br /&gt;
Fişierul de ieşire &amp;lt;code&amp;gt;siruriOUT.txt&amp;lt;/code&amp;gt; va conţine pe fiecare linie câte &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; valori, separate prin câte un spaţiu, reprezentând elementele unui şir. În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul &amp;quot;Nu corespunde restricțiilor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= Restricţii şi precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ m ≤ n ≤ 15&amp;lt;/code&amp;gt;&lt;br /&gt;
* şirurile vor fi afişate în ordine lexicografică&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
&amp;lt;code&amp;gt;siruriIN.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 5 3&lt;br /&gt;
&amp;lt;code&amp;gt;siruriOUT.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 1 2 3 &lt;br /&gt;
 1 2 4 &lt;br /&gt;
 1 3 4 &lt;br /&gt;
 1 3 5 &lt;br /&gt;
 2 3 4 &lt;br /&gt;
 2 3 5 &lt;br /&gt;
 2 4 5 &lt;br /&gt;
 3 4 5 &lt;br /&gt;
&lt;br /&gt;
= Exemplul 2 =&lt;br /&gt;
&amp;lt;code&amp;gt;siruriIN.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 8 9&lt;br /&gt;
&amp;lt;code&amp;gt;siruriOUT.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 Nu corespunde restricțiilor&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def genereaza_siruri(n, m, sir_curent, start):&lt;br /&gt;
    if len(sir_curent) == m:&lt;br /&gt;
        return [sir_curent.copy()]&lt;br /&gt;
&lt;br /&gt;
    siruri = []&lt;br /&gt;
    for i in range(start, n + 1):&lt;br /&gt;
        if not sir_curent or abs(sir_curent[-1] - i) &amp;lt;= 2:&lt;br /&gt;
            sir_curent.append(i)&lt;br /&gt;
            siruri.extend(genereaza_siruri(n, m, sir_curent, i + 1))&lt;br /&gt;
            sir_curent.pop()&lt;br /&gt;
&lt;br /&gt;
    return siruri&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;quot;siruriIN.txt&amp;quot;, &amp;quot;r&amp;quot;) as fisier_intrare:&lt;br /&gt;
        n, m = map(int, fisier_intrare.readline().split())&lt;br /&gt;
&lt;br /&gt;
    if not (1 &amp;lt;= m &amp;lt;= n &amp;lt;= 15):&lt;br /&gt;
        with open(&amp;quot;siruriOUT.txt&amp;quot;, &amp;quot;w&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as fisier_iesire:&lt;br /&gt;
            fisier_iesire.write(&amp;quot;Nu corespunde restricțiilor\n&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    siruri_generate = genereaza_siruri(n, m, [], 1)&lt;br /&gt;
&lt;br /&gt;
    with open(&amp;quot;siruriOUT.txt&amp;quot;, &amp;quot;w&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as fisier_iesire:&lt;br /&gt;
        if not siruri_generate:&lt;br /&gt;
            fisier_iesire.write(&amp;quot;Nu corespunde restricțiilor\n&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            for sir in sorted(siruri_generate):&lt;br /&gt;
                fisier_iesire.write(&amp;quot; &amp;quot;.join(map(str, sir)) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0197_-_Combinari&amp;diff=7646</id>
		<title>0197 - Combinari</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0197_-_Combinari&amp;diff=7646"/>
		<updated>2023-12-04T18:43:25Z</updated>

		<summary type="html">&lt;p&gt;Gabii: Pagină nouă: = Cerinţa = Se citesc două numere naturale nenule &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;. Să se afişeze, în ordine lexicografică, submulțimile de câte &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; elemente ale mulţimii &amp;lt;code&amp;gt;{1,2,..,n}&amp;lt;/code&amp;gt;.  = Date de intrare = Fişierul de intrare &amp;lt;code&amp;gt;combinariIN.txt&amp;lt;/code&amp;gt; conţine pe prima linie numerele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;, separate printr-un spatiu.  = Date de ieşire = Fişierul de ieşire &amp;lt;code&amp;gt;combinariOUT.txt&amp;lt;/code&amp;gt; va conţine pe fiecare li...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cerinţa =&lt;br /&gt;
Se citesc două numere naturale nenule &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;. Să se afişeze, în ordine lexicografică, submulțimile de câte &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; elemente ale mulţimii &amp;lt;code&amp;gt;{1,2,..,n}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fişierul de intrare &amp;lt;code&amp;gt;combinariIN.txt&amp;lt;/code&amp;gt; conţine pe prima linie numerele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;, separate printr-un spatiu.&lt;br /&gt;
&lt;br /&gt;
= Date de ieşire =&lt;br /&gt;
Fişierul de ieşire &amp;lt;code&amp;gt;combinariOUT.txt&amp;lt;/code&amp;gt; va conţine pe fiecare linie câte &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; valori, separate prin câte un spaţiu, reprezentând elementele unei submulțimi.&lt;br /&gt;
&lt;br /&gt;
= Restricţii şi precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ k ≤ n ≤ 15&amp;lt;/code&amp;gt;&lt;br /&gt;
* elementele fiecărei submulţimi vor fi afişate în ordine crescătoare&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
&amp;lt;code&amp;gt;combinariIN.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 4 2&lt;br /&gt;
&amp;lt;code&amp;gt;combinariOUT.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 1 2 &lt;br /&gt;
 1 3 &lt;br /&gt;
 1 4 &lt;br /&gt;
 2 3 &lt;br /&gt;
 2 4 &lt;br /&gt;
 3 4 &lt;br /&gt;
&lt;br /&gt;
= Exemplul 2 =&lt;br /&gt;
&amp;lt;code&amp;gt;combinariIN.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 4 2&lt;br /&gt;
consola &lt;br /&gt;
 &amp;quot;Nu corespunde restricțiilor&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def generate_combinations(n, k, current_combination, start, result):&lt;br /&gt;
    if k == 0:&lt;br /&gt;
        result.append(current_combination[:])&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    for i in range(start, n + 1):&lt;br /&gt;
        current_combination.append(i)&lt;br /&gt;
        generate_combinations(n, k - 1, current_combination, i + 1, result)&lt;br /&gt;
        current_combination.pop()&lt;br /&gt;
&lt;br /&gt;
def generate_and_write_combinations(input_file, output_file):&lt;br /&gt;
    try:&lt;br /&gt;
        with open(input_file, &#039;r&#039;) as file:&lt;br /&gt;
            n, k = map(int, file.readline().split())&lt;br /&gt;
&lt;br /&gt;
        if not (1 &amp;lt;= k &amp;lt;= n &amp;lt;= 15):&lt;br /&gt;
            raise ValueError(&amp;quot;Nu corespunde restricțiilor&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        result = []&lt;br /&gt;
        generate_combinations(n, k, [], 1, result)&lt;br /&gt;
&lt;br /&gt;
        with open(output_file, &#039;w&#039;) as file:&lt;br /&gt;
            for combination in result:&lt;br /&gt;
                file.write(&#039; &#039;.join(map(str, combination)) + &#039;\n&#039;)&lt;br /&gt;
    except ValueError as e:&lt;br /&gt;
        with open(output_file, &#039;w&#039;) as file:&lt;br /&gt;
            file.write(str(e) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    generate_and_write_combinations(&amp;quot;combinariIN.txt&amp;quot;, &amp;quot;combinariOUT.txt&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3159_-_numere124&amp;diff=7645</id>
		<title>3159 - numere124</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3159_-_numere124&amp;diff=7645"/>
		<updated>2023-12-04T18:36:54Z</updated>

		<summary type="html">&lt;p&gt;Gabii: Pagină nouă: = Cerința = Se citesc un număr natural &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; având cifrele diferite două câte două și o cifră &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;. Afișați în ordine crescătoare numerele formate din &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt; cifre distincte care se pot obține din cifrele lui &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;.  = Date de intrare = Programul citește de la tastatură numerele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;.  = Date de ieșire = Programul va afișa pe ecran numerele cerute, câte unul pe fiecare rând. În cazul în care...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cerința =&lt;br /&gt;
Se citesc un număr natural &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; având cifrele diferite două câte două și o cifră &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;. Afișați în ordine crescătoare numerele formate din &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt; cifre distincte care se pot obține din cifrele lui &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Programul citește de la tastatură numerele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Programul va afișa pe ecran numerele cerute, câte unul pe fiecare rând. În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul &amp;quot;Nu corespunde restricțiilor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 1.000.000.000&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;1 &amp;lt; c &amp;lt; 9&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; are cifrele distincte&lt;br /&gt;
* &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt; este mai mic decât numărul de cifre ale lui &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplu 1 =&lt;br /&gt;
Intrare&lt;br /&gt;
 2576 2&lt;br /&gt;
Ieșire&lt;br /&gt;
 25&lt;br /&gt;
 26&lt;br /&gt;
 27&lt;br /&gt;
 52&lt;br /&gt;
 56&lt;br /&gt;
 57&lt;br /&gt;
 62&lt;br /&gt;
 65&lt;br /&gt;
 67&lt;br /&gt;
 72&lt;br /&gt;
 75&lt;br /&gt;
 76&lt;br /&gt;
&lt;br /&gt;
= Exemplul 2 =&lt;br /&gt;
Intrare&lt;br /&gt;
 2576 2&lt;br /&gt;
consola&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Nu corespunde restricțiilor&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
from itertools import permutations&lt;br /&gt;
&lt;br /&gt;
def verifica_restrictii(n, c):&lt;br /&gt;
    # Verifică restricțiile&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 1000000000 and 1 &amp;lt; c &amp;lt; 9):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    # Verifică dacă n are cifre distincte&lt;br /&gt;
    cifre = set(str(n))&lt;br /&gt;
    if len(cifre) != len(str(n)):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    # Verifică dacă c este mai mic decât numărul de cifre ale lui n&lt;br /&gt;
    if c &amp;gt;= len(str(n)):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def generare_numere(n, c):&lt;br /&gt;
    # Verifică restricțiile&lt;br /&gt;
    if not verifica_restrictii(n, c):&lt;br /&gt;
        print(&amp;quot;Nu corespunde restricțiilor&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    # Restul codului pentru generarea și afișarea numerelor&lt;br /&gt;
    cifre = list(str(n))&lt;br /&gt;
    permutari = list(permutations(cifre, c))&lt;br /&gt;
&lt;br /&gt;
    for perm in sorted(permutari):&lt;br /&gt;
        numar = int(&amp;quot;&amp;quot;.join(perm))&lt;br /&gt;
        print(numar)&lt;br /&gt;
&lt;br /&gt;
# Citeste input-ul de la tastatură&lt;br /&gt;
input_data = input(&amp;quot;Introduceti n si c separate prin spatiu: &amp;quot;)&lt;br /&gt;
n, c = map(int, input_data.split())&lt;br /&gt;
&lt;br /&gt;
# Apelul funcției&lt;br /&gt;
generare_numere(n, c)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3910_-_Aranjamente1&amp;diff=7644</id>
		<title>3910 - Aranjamente1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3910_-_Aranjamente1&amp;diff=7644"/>
		<updated>2023-12-04T18:24:00Z</updated>

		<summary type="html">&lt;p&gt;Gabii: Pagină nouă: = Cerința = Se citesc trei numere naturale &amp;lt;code&amp;gt;a b n&amp;lt;/code&amp;gt;. Să se afișeze, în ordine lexicografică, șirurile cu &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; elemente distincte din mulțimea &amp;lt;code&amp;gt;{a, a + 1, ..., b}&amp;lt;/code&amp;gt;.  = Date de intrare = Programul citește de la tastatură numerele &amp;lt;code&amp;gt;a b n&amp;lt;/code&amp;gt;.  = Date de ieșire = Programul va afișa pe ecran șirurile cerute, fiecare pe câte o linie. Elementele fiecărui șir vor fi separate prin câte un spațiu. În cazul în care restricțiile...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cerința =&lt;br /&gt;
Se citesc trei numere naturale &amp;lt;code&amp;gt;a b n&amp;lt;/code&amp;gt;. Să se afișeze, în ordine lexicografică, șirurile cu &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; elemente distincte din mulțimea &amp;lt;code&amp;gt;{a, a + 1, ..., b}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Programul citește de la tastatură numerele &amp;lt;code&amp;gt;a b n&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Programul va afișa pe ecran șirurile cerute, fiecare pe câte o linie. Elementele fiecărui șir vor fi separate prin câte un spațiu. În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul &amp;quot;Nu corespunde restricțiilor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ a &amp;lt; b ≤ 1.000.000.000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1≤ n ≤ b - a &amp;lt; 8&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
Intrare&lt;br /&gt;
 4 6 2&lt;br /&gt;
Ieșire&lt;br /&gt;
 4 5 &lt;br /&gt;
 4 6 &lt;br /&gt;
 5 4 &lt;br /&gt;
 5 6 &lt;br /&gt;
 6 4 &lt;br /&gt;
 6 5&lt;br /&gt;
&lt;br /&gt;
= Exemplul 2 =&lt;br /&gt;
Intrare&lt;br /&gt;
 6 8 3&lt;br /&gt;
consola&lt;br /&gt;
&lt;br /&gt;
Nu corespunde restricțiilor&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
from itertools import permutations&lt;br /&gt;
&lt;br /&gt;
def verificare_restrictii(a, b, n):&lt;br /&gt;
    if not(1 &amp;lt;= a &amp;lt; b &amp;lt;= 1000000000) or not(1 &amp;lt;= n &amp;lt;= b - a &amp;lt; 8):&lt;br /&gt;
        print(&amp;quot;Nu corespunde restricțiilor&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def afisare_permutari(a, b, n):&lt;br /&gt;
    if not verificare_restrictii(a, b, n):&lt;br /&gt;
        return&lt;br /&gt;
    &lt;br /&gt;
    # Generarea tuturor permutărilor distincte de lungime n&lt;br /&gt;
    permutari = list(permutations(range(a, b + 1), n))&lt;br /&gt;
&lt;br /&gt;
    # Afișarea permutărilor&lt;br /&gt;
    for permutare in permutari:&lt;br /&gt;
        print(*permutare)&lt;br /&gt;
&lt;br /&gt;
# Citirea datelor de intrare&lt;br /&gt;
a, b, n = map(int, input(&amp;quot;Introduceți trei numere naturale separate prin spațiu (a b n): &amp;quot;).split())&lt;br /&gt;
&lt;br /&gt;
# Apelarea funcției pentru afișarea permutărilor sau mesaj de eroare&lt;br /&gt;
afisare_permutari(a, b, n)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0196_-_Aranjamente&amp;diff=7643</id>
		<title>0196 - Aranjamente</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0196_-_Aranjamente&amp;diff=7643"/>
		<updated>2023-12-04T18:13:17Z</updated>

		<summary type="html">&lt;p&gt;Gabii: Pagină nouă: = Cerinţa = Se citesc două numere naturale nenule &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;. Să se afişeze, în ordine lexicografică, aranjamentele de câte &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; elemente ale mulţimii &amp;lt;code&amp;gt;{1,2,..,n}&amp;lt;/code&amp;gt;.  = Date de intrare = Fişierul de intrare &amp;lt;code&amp;gt;aranjamenteIN.txt&amp;lt;/code&amp;gt; conţine pe prima linie numerele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;, separate printr-un spatiu.  = Date de ieşire = Fişierul de ieşire &amp;lt;code&amp;gt;aranjamenteOUT.txt&amp;lt;/code&amp;gt; va conţine pe fiecar...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cerinţa =&lt;br /&gt;
Se citesc două numere naturale nenule &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;. Să se afişeze, în ordine lexicografică, aranjamentele de câte &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; elemente ale mulţimii &amp;lt;code&amp;gt;{1,2,..,n}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fişierul de intrare &amp;lt;code&amp;gt;aranjamenteIN.txt&amp;lt;/code&amp;gt; conţine pe prima linie numerele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;, separate printr-un spatiu.&lt;br /&gt;
&lt;br /&gt;
= Date de ieşire =&lt;br /&gt;
Fişierul de ieşire &amp;lt;code&amp;gt;aranjamenteOUT.txt&amp;lt;/code&amp;gt; va conţine pe fiecare linie câte &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; valori, separate prin câte un spaţiu, reprezentând elementele unei aranjări. În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul &amp;quot;Nu corespunde restricțiilor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= Restricţii şi precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;0 &amp;lt; k &amp;lt; n &amp;lt; 9&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
&amp;lt;code&amp;gt;aranjamenteIN.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 4 2&lt;br /&gt;
&amp;lt;code&amp;gt;aranjamenteOUT.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 1 2 &lt;br /&gt;
 1 3 &lt;br /&gt;
 1 4 &lt;br /&gt;
 2 1 &lt;br /&gt;
 2 3 &lt;br /&gt;
 2 4 &lt;br /&gt;
 3 1 &lt;br /&gt;
 3 2 &lt;br /&gt;
 3 4 &lt;br /&gt;
 4 1 &lt;br /&gt;
 4 2 &lt;br /&gt;
 4 3 &lt;br /&gt;
&lt;br /&gt;
= Exemplul 2 =&lt;br /&gt;
&amp;lt;code&amp;gt;aranjamenteIN.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 4 5&lt;br /&gt;
consola&lt;br /&gt;
 &amp;quot;Nu corespunde restricțiilor&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def verifica_restrictii(n, k):&lt;br /&gt;
    if not (0 &amp;lt; k &amp;lt; n &amp;lt; 9):&lt;br /&gt;
        print(&amp;quot;Nu corespunde restricțiilor.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def genereaza_aranjamente(n, k, aranjament_curent, numere_folosite, fisier_output):&lt;br /&gt;
    if len(aranjament_curent) == k:&lt;br /&gt;
        fisier_output.write(&amp;quot; &amp;quot;.join(map(str, aranjament_curent)) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, n + 1):&lt;br /&gt;
        if i not in numere_folosite:&lt;br /&gt;
            numere_folosite.add(i)&lt;br /&gt;
            genereaza_aranjamente(n, k, aranjament_curent + [i], numere_folosite, fisier_output)&lt;br /&gt;
            numere_folosite.remove(i)&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    # Citirea datelor de intrare din fișier&lt;br /&gt;
    with open(&amp;quot;aranjamenteIN.txt&amp;quot;, &amp;quot;r&amp;quot;) as fisier_intrare:&lt;br /&gt;
        n, k = map(int, fisier_intrare.readline().split())&lt;br /&gt;
&lt;br /&gt;
    # Verificarea restricțiilor&lt;br /&gt;
    if not verifica_restrictii(n, k):&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    # Deschiderea fișierului de ieșire pentru scriere&lt;br /&gt;
    with open(&amp;quot;aranjamenteOUT.txt&amp;quot;, &amp;quot;w&amp;quot;) as fisier_iesire:&lt;br /&gt;
        # Inițializarea listei de elemente și a setului de numere folosite&lt;br /&gt;
        aranjament_curent = []&lt;br /&gt;
        numere_folosite = set()&lt;br /&gt;
&lt;br /&gt;
        # Generarea aranjamentelor și scrierea lor în fișierul de ieșire&lt;br /&gt;
        genereaza_aranjamente(n, k, aranjament_curent, numere_folosite, fisier_iesire)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0317_-_SumMax&amp;diff=7642</id>
		<title>0317 - SumMax</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0317_-_SumMax&amp;diff=7642"/>
		<updated>2023-12-04T18:01:16Z</updated>

		<summary type="html">&lt;p&gt;Gabii: Pagină nouă: = Cerinţa = Se dă o matrice pătratică cu &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; lini şi &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; coloane şi elemente numere naturale distincte. Determinaţi cea mai mare sumă a &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; elemente din matrice, cu proprietatea că oricare două elemente se află pe linii şi coloane distincte.  = Date de intrare = Fişierul de intrare &amp;lt;code&amp;gt;summaxIN.txt&amp;lt;/code&amp;gt; conţine pe prima linie numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, iar pe următoarele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; linii câte &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere natural...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cerinţa =&lt;br /&gt;
Se dă o matrice pătratică cu &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; lini şi &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; coloane şi elemente numere naturale distincte. Determinaţi cea mai mare sumă a &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; elemente din matrice, cu proprietatea că oricare două elemente se află pe linii şi coloane distincte.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fişierul de intrare &amp;lt;code&amp;gt;summaxIN.txt&amp;lt;/code&amp;gt; conţine pe prima linie numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, iar pe următoarele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; linii câte &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere naturale, separate prin spaţii, reprezentând elementele matricei.&lt;br /&gt;
&lt;br /&gt;
= Date de ieşire =&lt;br /&gt;
Fişierul de ieşire &amp;lt;code&amp;gt;summaxOUT.txt&amp;lt;/code&amp;gt; va conţine pe prima linie numărul &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt;, reprezentând suma maximă determinată. În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul &amp;quot;Nu corespunde restricțiilor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= Restricţii şi precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 10&amp;lt;/code&amp;gt;&lt;br /&gt;
* elementele matricei vor avea cel mult &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; cifre&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
&amp;lt;code&amp;gt;summaxIN.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 4&lt;br /&gt;
 12 16 5 4&lt;br /&gt;
 11 14 6 7&lt;br /&gt;
 8 2 3 17&lt;br /&gt;
 10 9 13 15&lt;br /&gt;
&amp;lt;code&amp;gt;summaxOUT.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 57&lt;br /&gt;
&lt;br /&gt;
= Exemplul 2 =&lt;br /&gt;
&amp;lt;code&amp;gt;summaxIN.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 100000&lt;br /&gt;
consola&lt;br /&gt;
 Nu corespunde restricțiilor&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def citeste_matrice(file_path):&lt;br /&gt;
    with open(file_path, &#039;r&#039;, encoding=&#039;utf-8&#039;) as file:&lt;br /&gt;
        n = int(file.readline().strip())&lt;br /&gt;
        matrice = [list(map(int, file.readline().split())) for _ in range(n)]&lt;br /&gt;
    return n, matrice&lt;br /&gt;
&lt;br /&gt;
def scrie_rezultat(file_path, rezultat):&lt;br /&gt;
    with open(file_path, &#039;w&#039;, encoding=&#039;utf-8&#039;) as file:&lt;br /&gt;
        file.write(str(rezultat))&lt;br /&gt;
&lt;br /&gt;
def verifica_restrictii(n, matrice):&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 10):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    for linie in matrice:&lt;br /&gt;
        for element in linie:&lt;br /&gt;
            if not (0 &amp;lt;= element &amp;lt;= 9999):&lt;br /&gt;
                return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def gaseste_suma_maxima(n, matrice):&lt;br /&gt;
    elemente_sortate = sorted([(matrice[i][j], i, j) for i in range(n) for j in range(n)], reverse=True)&lt;br /&gt;
&lt;br /&gt;
    linii_selectate = set()&lt;br /&gt;
    coloane_selectate = set()&lt;br /&gt;
&lt;br /&gt;
    suma_maxima = 0&lt;br /&gt;
&lt;br /&gt;
    for element, i, j in elemente_sortate:&lt;br /&gt;
        if i not in linii_selectate and j not in coloane_selectate:&lt;br /&gt;
            suma_maxima += element&lt;br /&gt;
            linii_selectate.add(i)&lt;br /&gt;
            coloane_selectate.add(j)&lt;br /&gt;
&lt;br /&gt;
    return suma_maxima&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    fisier_intrare = &amp;quot;summaxIN.txt&amp;quot;&lt;br /&gt;
    fisier_iesire = &amp;quot;summaxOUT.txt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    n, matrice = citeste_matrice(fisier_intrare)&lt;br /&gt;
&lt;br /&gt;
    if verifica_restrictii(n, matrice):&lt;br /&gt;
        rezultat = gaseste_suma_maxima(n, matrice)&lt;br /&gt;
        if rezultat &amp;gt; 0:&lt;br /&gt;
            scrie_rezultat(fisier_iesire, rezultat)&lt;br /&gt;
        else:&lt;br /&gt;
            scrie_rezultat( &amp;quot;Nu corespunde restrictiilor&amp;quot;.encode(&#039;utf-8&#039;))&lt;br /&gt;
    else:&lt;br /&gt;
        scrie_rezultat(fisier_iesire, &amp;quot;Nu corespunde restricțiilor&amp;quot;.encode(&#039;utf-8&#039;).decode(&#039;utf-8&#039;))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2646_-_impartire&amp;diff=7640</id>
		<title>2646 - impartire</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2646_-_impartire&amp;diff=7640"/>
		<updated>2023-12-04T17:30:12Z</updated>

		<summary type="html">&lt;p&gt;Gabii: Pagină nouă: = Cerința = Se dau &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere naturale, unde &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; este un număr par. Se grupează cele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere în perechi şi pentru fiecare pereche de numere se află restul împărţirii unui număr din pereche la celălalt. Se cere să se afle valoarea minimă a sumei acestor resturi.  = Date de intrare = Programul citește de la tastatură numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, iar apoi cele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere naturale, separate prin spații.  = Date de ieșire...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cerința =&lt;br /&gt;
Se dau &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere naturale, unde &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; este un număr par. Se grupează cele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere în perechi şi pentru fiecare pereche de numere se află restul împărţirii unui număr din pereche la celălalt. Se cere să se afle valoarea minimă a sumei acestor resturi.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Programul citește de la tastatură numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, iar apoi cele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere naturale, separate prin spații.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Programul va afișa pe ecran suma minimă a resturilor. În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul &amp;quot;Nu corespunde restricțiilor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;2 ≤ n ≤ 18&amp;lt;/code&amp;gt;&lt;br /&gt;
* cele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere citite vor fi mai mici decât &amp;lt;code&amp;gt;1.000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
Intrare&lt;br /&gt;
 4&lt;br /&gt;
 6 5 3 4&lt;br /&gt;
Ieșire&lt;br /&gt;
 1&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
Intrare&lt;br /&gt;
 20&lt;br /&gt;
consola&lt;br /&gt;
 Nu corespunde restricțiilor.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def citeste_numar_intre_limite(mesaj, limita_inferioara, limita_superioara):&lt;br /&gt;
    while True:&lt;br /&gt;
        try:&lt;br /&gt;
            valoare = int(input(mesaj))&lt;br /&gt;
            if limita_inferioara &amp;lt;= valoare &amp;lt;= limita_superioara:&lt;br /&gt;
                return valoare&lt;br /&gt;
            else:&lt;br /&gt;
                print(&amp;quot;Nu corespunde restricțiilor.&amp;quot;)&lt;br /&gt;
        except ValueError:&lt;br /&gt;
            print(&amp;quot;Nu corespunde restricțiilor.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Citirea numărului de elemente&lt;br /&gt;
n = citeste_numar_intre_limite(&amp;quot;Introduceti numarul de elemente (n): &amp;quot;, 2, 18)&lt;br /&gt;
&lt;br /&gt;
# Inițializarea listei pentru stocarea numerelor&lt;br /&gt;
numere = []&lt;br /&gt;
&lt;br /&gt;
# Citirea elementelor și adăugarea lor în listă&lt;br /&gt;
for i in range(n):&lt;br /&gt;
    numar = citeste_numar_intre_limite(f&amp;quot;Introduceti numarul {i + 1}: &amp;quot;, 0, 999)&lt;br /&gt;
    numere.append(numar)&lt;br /&gt;
&lt;br /&gt;
# Calculul sumei minime a resturilor&lt;br /&gt;
suma_minima = 0&lt;br /&gt;
for i in range(0, n, 2):&lt;br /&gt;
    if numere[i] &amp;lt; numere[i + 1]:&lt;br /&gt;
        rest = numere[i] % numere[i + 1]&lt;br /&gt;
    elif numere[i] &amp;gt; numere[i + 1]:&lt;br /&gt;
        rest = numere[i + 1] % numere[i]&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Nu corespunde restricțiilor.&amp;quot;)&lt;br /&gt;
        exit(1)&lt;br /&gt;
    suma_minima += rest&lt;br /&gt;
&lt;br /&gt;
# Afișarea rezultatului&lt;br /&gt;
print(f&amp;quot;Suma minima a resturilor este: {suma_minima}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2205_-_permrep&amp;diff=7639</id>
		<title>2205 - permrep</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2205_-_permrep&amp;diff=7639"/>
		<updated>2023-12-04T17:16:41Z</updated>

		<summary type="html">&lt;p&gt;Gabii: Pagină nouă: == Enunț == Se consideră un cuvânt &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt; format din litere mici, nu neapărat distincte.  = Cerința = Să se afișeze în ordine lexicografică toate cuvintele distincte formate cu exact aceleași caractere ca și &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt;.  = Date de intrare = Fișierul de intrare &amp;lt;code&amp;gt;permrepIN.txt&amp;lt;/code&amp;gt; conține pe prima linie cuvântul &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt;.  = Date de ieșire = Fișierul de ieșire &amp;lt;code&amp;gt;permrepOUT.txt&amp;lt;/code&amp;gt; va conține pe câte o linie un cuvânt care are...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunț ==&lt;br /&gt;
Se consideră un cuvânt &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt; format din litere mici, nu neapărat distincte.&lt;br /&gt;
&lt;br /&gt;
= Cerința =&lt;br /&gt;
Să se afișeze în ordine lexicografică toate cuvintele distincte formate cu exact aceleași caractere ca și &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;permrepIN.txt&amp;lt;/code&amp;gt; conține pe prima linie cuvântul &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fișierul de ieșire &amp;lt;code&amp;gt;permrepOUT.txt&amp;lt;/code&amp;gt; va conține pe câte o linie un cuvânt care are exact aceleași litere ca și &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt;. În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul &amp;quot;Nu corespunde restricțiilor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* Cuvântul &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt; va avea lungimea de cel mult &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
&amp;lt;code&amp;gt;permrepIN.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 mama&lt;br /&gt;
&amp;lt;code&amp;gt;permrepOUT.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 aamm&lt;br /&gt;
 amam&lt;br /&gt;
 amma&lt;br /&gt;
 maam&lt;br /&gt;
 mama&lt;br /&gt;
 mmaa&lt;br /&gt;
&lt;br /&gt;
= Exemplul 2 =&lt;br /&gt;
&amp;lt;code&amp;gt;permrepIN.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 Pneumonomie&lt;br /&gt;
consola &lt;br /&gt;
 Nu corespunde restricțiilor&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def genereaza_permutari(cuvant):&lt;br /&gt;
    if len(cuvant) == 0:&lt;br /&gt;
        return [&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
    litera = cuvant[0]&lt;br /&gt;
    permutari_rest = genereaza_permutari(cuvant[1:])&lt;br /&gt;
    rezultat = set()&lt;br /&gt;
&lt;br /&gt;
    for perm in permutari_rest:&lt;br /&gt;
        for i in range(len(perm) + 1):&lt;br /&gt;
            rezultat.add(perm[:i] + litera + perm[i:])&lt;br /&gt;
&lt;br /&gt;
    return list(rezultat)&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    # Citire cuvânt din fișierul de intrare&lt;br /&gt;
    with open(&#039;permrepIN.txt&#039;, &#039;r&#039;) as intrare:&lt;br /&gt;
        cuvant = intrare.readline().strip()&lt;br /&gt;
&lt;br /&gt;
    # Verificare lungime cuvânt&lt;br /&gt;
    if len(cuvant) &amp;gt; 9:&lt;br /&gt;
        print(&amp;quot;Nu corespunde restricțiilor&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    # Generare și sortare lexicografică a permutărilor cuvântului&lt;br /&gt;
    permutari = genereaza_permutari(cuvant)&lt;br /&gt;
    permutari.sort()&lt;br /&gt;
&lt;br /&gt;
    # Scriere în fișierul de ieșire&lt;br /&gt;
    with open(&#039;permrepOUT.txt&#039;, &#039;w&#039;) as iesire:&lt;br /&gt;
        for perm in permutari:&lt;br /&gt;
            iesire.write(perm + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3923_-_back_abc2&amp;diff=7638</id>
		<title>3923 - back abc2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3923_-_back_abc2&amp;diff=7638"/>
		<updated>2023-12-04T17:04:36Z</updated>

		<summary type="html">&lt;p&gt;Gabii: Pagină nouă: = Cerința = Se citesc două numere naturale &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;. Afișați în ordine lexicografică toate cuvintele care sunt formate din &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; litere distincte folosind primele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; litere mari din alfabet.  = Date de intrare = Programul citește de la tastatură numerele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;, separate prin spații.  = Date de ieșire = Programul va afișa pe ecran pe linii separate cuvintele cerute. În cazul în care restric...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cerința =&lt;br /&gt;
Se citesc două numere naturale &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;. Afișați în ordine lexicografică toate cuvintele care sunt formate din &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; litere distincte folosind primele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; litere mari din alfabet.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Programul citește de la tastatură numerele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;, separate prin spații.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Programul va afișa pe ecran pe linii separate cuvintele cerute. În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul &amp;quot;Nu corespunde restricțiilor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;0 ≤ n ≤ 26&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;0 ≤ m ≤ 5&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;m ≤ n&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
Intrare&lt;br /&gt;
 4 3&lt;br /&gt;
Ieșire&lt;br /&gt;
 ABC&lt;br /&gt;
 ABD&lt;br /&gt;
 ACB&lt;br /&gt;
 ACD&lt;br /&gt;
 ADB&lt;br /&gt;
 ADC&lt;br /&gt;
 BAC&lt;br /&gt;
 BAD&lt;br /&gt;
 BCA&lt;br /&gt;
 BCD&lt;br /&gt;
 BDA&lt;br /&gt;
 BDC&lt;br /&gt;
 CAB&lt;br /&gt;
 CAD&lt;br /&gt;
 CBA&lt;br /&gt;
 CBD&lt;br /&gt;
 CDA&lt;br /&gt;
 CDB&lt;br /&gt;
 DAB&lt;br /&gt;
 DAC&lt;br /&gt;
 DBA&lt;br /&gt;
 DBC&lt;br /&gt;
 DCA&lt;br /&gt;
 DCB&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
Intrare&lt;br /&gt;
 4 3&lt;br /&gt;
consola&lt;br /&gt;
 Nu corespunde restricțiilor.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import itertools&lt;br /&gt;
&lt;br /&gt;
def check_restrictions(n, m):&lt;br /&gt;
    if 0 &amp;lt;= n &amp;lt;= 26 and 0 &amp;lt;= m &amp;lt;= 5 and m &amp;lt;= n:&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Nu corespunde restricțiilor.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
def generate_words(n, m):&lt;br /&gt;
    alphabet = &#039;ABCDEFGHIJKLMNOPQRSTUVWXYZ&#039;&lt;br /&gt;
    letters = alphabet[:n]&lt;br /&gt;
&lt;br /&gt;
    # Generăm toate permutările posibile de lungime m folosind literele primele n din alfabet&lt;br /&gt;
    permutations = itertools.permutations(letters, m)&lt;br /&gt;
&lt;br /&gt;
    # Afisăm cuvintele în ordine lexicografică&lt;br /&gt;
    for word in sorted(permutations):&lt;br /&gt;
        print(&#039;&#039;.join(word))&lt;br /&gt;
&lt;br /&gt;
# Citim numerele n și m de la tastatură&lt;br /&gt;
n, m = map(int, input(&amp;quot;Introduceți valorile lui n și m (separate prin spațiu): &amp;quot;).split())&lt;br /&gt;
&lt;br /&gt;
# Verificăm restricțiile folosind funcția check_restrictions&lt;br /&gt;
if check_restrictions(n, m):&lt;br /&gt;
    generate_words(n, m)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4008_-_back_11&amp;diff=7637</id>
		<title>4008 - back 11</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4008_-_back_11&amp;diff=7637"/>
		<updated>2023-12-04T16:56:59Z</updated>

		<summary type="html">&lt;p&gt;Gabii: Pagină nouă: = Cerința = Se citește un număr natural &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;. Afișați în ordine crescătoare toate numerele care sunt formate din &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; cifre distincte și care au mai multe cifre pare decât cifre impare.  = Date de intrare = Programul citește de la tastatură numerul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;.  = Date de ieșire = Programul va afișa pe ecran pe linii separate numerele cerute. Numerele se vor afișa în ordine strict crescătoare  În cazul în care restricțiile nu sunt în...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cerința =&lt;br /&gt;
Se citește un număr natural &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;. Afișați în ordine crescătoare toate numerele care sunt formate din &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; cifre distincte și care au mai multe cifre pare decât cifre impare.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Programul citește de la tastatură numerul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Programul va afișa pe ecran pe linii separate numerele cerute. Numerele se vor afișa în ordine strict crescătoare&lt;br /&gt;
&lt;br /&gt;
În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul &amp;quot;Nu corespunde restricțiilor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 8&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
Intrare&lt;br /&gt;
 3&lt;br /&gt;
Ieșire&lt;br /&gt;
 102&lt;br /&gt;
 104&lt;br /&gt;
 106&lt;br /&gt;
 108&lt;br /&gt;
 120&lt;br /&gt;
 124&lt;br /&gt;
 126&lt;br /&gt;
 128&lt;br /&gt;
 140&lt;br /&gt;
 142&lt;br /&gt;
 146&lt;br /&gt;
 148&lt;br /&gt;
 160&lt;br /&gt;
 162&lt;br /&gt;
 164&lt;br /&gt;
 168&lt;br /&gt;
 180&lt;br /&gt;
 182&lt;br /&gt;
 184&lt;br /&gt;
 186&lt;br /&gt;
 201&lt;br /&gt;
 203&lt;br /&gt;
 204&lt;br /&gt;
 205&lt;br /&gt;
 206&lt;br /&gt;
 207&lt;br /&gt;
 ...&lt;br /&gt;
 894&lt;br /&gt;
 896&lt;br /&gt;
 902&lt;br /&gt;
 904&lt;br /&gt;
 906&lt;br /&gt;
 908&lt;br /&gt;
 920&lt;br /&gt;
 924&lt;br /&gt;
 926&lt;br /&gt;
 928&lt;br /&gt;
 940&lt;br /&gt;
 942&lt;br /&gt;
 946&lt;br /&gt;
 948&lt;br /&gt;
 960&lt;br /&gt;
 962&lt;br /&gt;
 964&lt;br /&gt;
 968&lt;br /&gt;
 980&lt;br /&gt;
 982&lt;br /&gt;
 984&lt;br /&gt;
 986&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
Intrare&lt;br /&gt;
 3&lt;br /&gt;
Ieșire&lt;br /&gt;
 Nu corespunde restricțiilor.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def numere_crescatoare(n):&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 8):&lt;br /&gt;
        print(&amp;quot;Nu corespunde restricțiilor.&amp;quot;)&lt;br /&gt;
        return None&lt;br /&gt;
&lt;br /&gt;
    rezultate = []&lt;br /&gt;
&lt;br /&gt;
    def are_mai_multe_cifre_pare(numar):&lt;br /&gt;
        cifre = [int(cifra) for cifra in str(numar)]&lt;br /&gt;
        cifre_pare = sum(1 for cifra in cifre if cifra % 2 == 0)&lt;br /&gt;
        cifre_impare = len(cifre) - cifre_pare&lt;br /&gt;
        return cifre_pare &amp;gt;= cifre_impare  # Am modificat condiția pentru a include și 0&lt;br /&gt;
&lt;br /&gt;
    def genereaza_numere(prefix, cifre_disponibile):&lt;br /&gt;
        if len(prefix) == n:&lt;br /&gt;
            if are_mai_multe_cifre_pare(int(prefix)):&lt;br /&gt;
                rezultate.append(int(prefix))&lt;br /&gt;
            return&lt;br /&gt;
&lt;br /&gt;
        for cifra in cifre_disponibile:&lt;br /&gt;
            if prefix or cifra != &#039;0&#039;:  # Evită adăugarea 0 la început&lt;br /&gt;
                urmatoarele_cifre = cifre_disponibile.replace(cifra, &#039;&#039;)&lt;br /&gt;
                genereaza_numere(prefix + cifra, urmatoarele_cifre)&lt;br /&gt;
&lt;br /&gt;
    cifre_disponibile = &#039;&#039;.join(map(str, range(10)))  # Cifrele disponibile de la 0 la 9&lt;br /&gt;
    genereaza_numere(&#039;&#039;, cifre_disponibile)&lt;br /&gt;
&lt;br /&gt;
    return sorted(rezultate)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Citirea valorii de la tastatură cu verificare pentru restricții&lt;br /&gt;
try:&lt;br /&gt;
    n = int(input(&amp;quot;Introduceți numărul n: &amp;quot;))&lt;br /&gt;
    rezultate = numere_crescatoare(n)&lt;br /&gt;
    if rezultate is not None:&lt;br /&gt;
        print(f&amp;quot;Numerele cu {n} cifre distincte, cu mai multe cifre pare decât cifre impare sunt:&amp;quot;)&lt;br /&gt;
        for rezultat in rezultate:&lt;br /&gt;
            print(rezultat)&lt;br /&gt;
except ValueError:&lt;br /&gt;
    print(&amp;quot;Introduceți un număr valid.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3996_-_back_abc3&amp;diff=7636</id>
		<title>3996 - back abc3</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3996_-_back_abc3&amp;diff=7636"/>
		<updated>2023-12-04T16:47:19Z</updated>

		<summary type="html">&lt;p&gt;Gabii: Pagină nouă: = Cerința = Se citește un număr natural &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;. Afișați în ordine lexicografică toate cuvintele care sunt formate din &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; litere mari, care au literele ordonate alfabetic strict crescător și în care numărul de vocale este mai mare decât numărul de consoane.  = Date de intrare = Programul citește de la tastatură numerul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;.  = Date de ieșire = Programul va afișa pe ecran pe linii separate cuvintele cerute. Cuvintele se vor afișa...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cerința =&lt;br /&gt;
Se citește un număr natural &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;. Afișați în ordine lexicografică toate cuvintele care sunt formate din &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; litere mari, care au literele ordonate alfabetic strict crescător și în care numărul de vocale este mai mare decât numărul de consoane.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Programul citește de la tastatură numerul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Programul va afișa pe ecran pe linii separate cuvintele cerute. Cuvintele se vor afișa în ordine lexicografică. În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul &amp;quot;Nu corespunde restricțiilor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 9&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
Intrare&lt;br /&gt;
 3&lt;br /&gt;
Ieșire&lt;br /&gt;
 ABE&lt;br /&gt;
 ABI&lt;br /&gt;
 ABO&lt;br /&gt;
 ABU&lt;br /&gt;
 ACE&lt;br /&gt;
 ACI&lt;br /&gt;
 ACO&lt;br /&gt;
 ACU&lt;br /&gt;
 ADE&lt;br /&gt;
 ADI&lt;br /&gt;
 ADO&lt;br /&gt;
 ADU&lt;br /&gt;
 AEF&lt;br /&gt;
 AEG&lt;br /&gt;
 AEH&lt;br /&gt;
 AEI&lt;br /&gt;
 AEJ&lt;br /&gt;
 AEK&lt;br /&gt;
 AEL&lt;br /&gt;
 AEM&lt;br /&gt;
 AEN&lt;br /&gt;
 AEO&lt;br /&gt;
 AEP&lt;br /&gt;
 AEQ&lt;br /&gt;
 AER&lt;br /&gt;
 AES&lt;br /&gt;
 AET&lt;br /&gt;
 AEU&lt;br /&gt;
 AEV&lt;br /&gt;
 ...&lt;br /&gt;
 IUW&lt;br /&gt;
 IUX&lt;br /&gt;
 IUY&lt;br /&gt;
 IUZ&lt;br /&gt;
 JOU&lt;br /&gt;
 KOU&lt;br /&gt;
 LOU&lt;br /&gt;
 MOU&lt;br /&gt;
 NOU&lt;br /&gt;
 OPU&lt;br /&gt;
 OQU&lt;br /&gt;
 ORU&lt;br /&gt;
 OSU&lt;br /&gt;
 OTU&lt;br /&gt;
 OUV&lt;br /&gt;
 OUW&lt;br /&gt;
 OUX&lt;br /&gt;
 OUY&lt;br /&gt;
 OUZ&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
Intrare&lt;br /&gt;
 10&lt;br /&gt;
consola&lt;br /&gt;
 Nu corespunde restricțiilor&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
from itertools import permutations&lt;br /&gt;
&lt;br /&gt;
def numara_vocale_consoane(cuvant):&lt;br /&gt;
    # Calculează numărul de vocale și consoane din cuvânt&lt;br /&gt;
    vocale = sum(1 for litera in cuvant if litera in &amp;quot;AEIOU&amp;quot;)&lt;br /&gt;
    consoane = len(cuvant) - vocale&lt;br /&gt;
    return vocale, consoane&lt;br /&gt;
&lt;br /&gt;
def genereaza_cuvinte(n):&lt;br /&gt;
    # Verifică restricțiile pentru n&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 9):&lt;br /&gt;
        print(&amp;quot;Nu corespunde restricțiilor&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    # Generează toate permutările de litere de lungime n cu litere mari&lt;br /&gt;
    litere = &amp;quot;ABCDEFGHIJKLMNOPQRSTUVWXYZ&amp;quot;&lt;br /&gt;
    toate_permutarile = [&#039;&#039;.join(p) for p in permutations(litere, r=n)]&lt;br /&gt;
&lt;br /&gt;
    # Filtrează permutările pentru a îndeplini condițiile&lt;br /&gt;
    cuvinte_valide = [cuvant for cuvant in toate_permutarile if cuvant == &#039;&#039;.join(sorted(cuvant)) and numara_vocale_consoane(cuvant)[0] &amp;gt; numara_vocale_consoane(cuvant)[1]]&lt;br /&gt;
&lt;br /&gt;
    # Afișează cuvintele în ordine lexicografică&lt;br /&gt;
    for cuvant_valid in sorted(cuvinte_valide):&lt;br /&gt;
        print(cuvant_valid)&lt;br /&gt;
&lt;br /&gt;
# Citirea numărului n de la tastatură&lt;br /&gt;
n = int(input(&amp;quot;Introduceți un număr natural n: &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
# Apelarea funcției cu verificare restricții și afișarea cuvintelor cerute&lt;br /&gt;
genereaza_cuvinte(n)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3922_-_back_abc1&amp;diff=7634</id>
		<title>3922 - back abc1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3922_-_back_abc1&amp;diff=7634"/>
		<updated>2023-12-04T16:33:39Z</updated>

		<summary type="html">&lt;p&gt;Gabii: Pagină nouă: = Cerința = Se citesc două numere naturale &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;. Afișați în ordine lexicografică toate cuvintele care sunt formate din &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; litere folosind primele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; litere mari din alfabet și care au literele ordonate alfabetic strict crescător.  = Date de intrare = Programul citește de la tastatură numerele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;, separate prin spații.  = Date de ieșire = Programul va afișa pe ecran pe linii separa...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cerința =&lt;br /&gt;
Se citesc două numere naturale &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;. Afișați în ordine lexicografică toate cuvintele care sunt formate din &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; litere folosind primele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; litere mari din alfabet și care au literele ordonate alfabetic strict crescător.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Programul citește de la tastatură numerele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;, separate prin spații.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Programul va afișa pe ecran pe linii separate cuvintele cerute. În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul &amp;quot;Nu corespunde restricțiilor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 26&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;0 ≤ m ≤ 10&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;m ≤ n&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
Intrare&lt;br /&gt;
 5 3&lt;br /&gt;
Ieșire&lt;br /&gt;
 ABC&lt;br /&gt;
 ABD&lt;br /&gt;
 ABE&lt;br /&gt;
 ACD&lt;br /&gt;
 ACE&lt;br /&gt;
 ADE&lt;br /&gt;
 BCD&lt;br /&gt;
 BCE&lt;br /&gt;
 BDE&lt;br /&gt;
 CDE&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
Intrare&lt;br /&gt;
 5 7 &lt;br /&gt;
consola&lt;br /&gt;
 Nu corespunde restricțiilor&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
from itertools import combinations&lt;br /&gt;
&lt;br /&gt;
def generate_words(n, m):&lt;br /&gt;
    alphabet = &#039;ABCDEFGHIJKLMNOPQRSTUVWXYZ&#039;&lt;br /&gt;
    letters = alphabet[:n]&lt;br /&gt;
&lt;br /&gt;
    for combination in combinations(letters, m):&lt;br /&gt;
        word = &#039;&#039;.join(sorted(combination))&lt;br /&gt;
        print(word)&lt;br /&gt;
&lt;br /&gt;
def check_restrictions(n, m):&lt;br /&gt;
    if 1 &amp;lt;= n &amp;lt;= 26 and 0 &amp;lt;= m &amp;lt;= 10 and m &amp;lt;= n:&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Nu corespunde restricțiilor&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
# Citirea datelor de intrare&lt;br /&gt;
n, m = map(int, input(&amp;quot;Introduceți n și m (separate prin spații): &amp;quot;).split())&lt;br /&gt;
&lt;br /&gt;
# Verificarea restricțiilor și generarea cuvintelor&lt;br /&gt;
if check_restrictions(n, m):&lt;br /&gt;
    generate_words(n, m)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3988_-_permnk&amp;diff=7624</id>
		<title>3988 - permnk</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3988_-_permnk&amp;diff=7624"/>
		<updated>2023-12-04T13:33:19Z</updated>

		<summary type="html">&lt;p&gt;Gabii: Pagină nouă: = Cerința = Se dau numerele naturale &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; si &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;. Sa se genereze in ordine lexicografică toate permutările mulțimii &amp;lt;code&amp;gt;{1,2,...,n}&amp;lt;/code&amp;gt; cu proprietatea că diferența în modul dintre oricare două numere alăturate din permutare este de cel mult &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;.  = Date de intrare = Programul citește de pe prima linie numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, iar de pe a doua linie numărul &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;.  = Date de ieșire = Programul va afișa pe ecran, pe c...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cerința =&lt;br /&gt;
Se dau numerele naturale &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; si &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;. Sa se genereze in ordine lexicografică toate permutările mulțimii &amp;lt;code&amp;gt;{1,2,...,n}&amp;lt;/code&amp;gt; cu proprietatea că diferența în modul dintre oricare două numere alăturate din permutare este de cel mult &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Programul citește de pe prima linie numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, iar de pe a doua linie numărul &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Programul va afișa pe ecran, pe câte o linie, în ordine lexicografică, permutările cerute.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ k ≤ n ≤ 9&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
Intrare&lt;br /&gt;
 4&lt;br /&gt;
 2&lt;br /&gt;
Ieșire&lt;br /&gt;
 1 2 3 4&lt;br /&gt;
 1 2 4 3&lt;br /&gt;
 1 3 2 4&lt;br /&gt;
 1 3 4 2&lt;br /&gt;
 2 1 3 4&lt;br /&gt;
 2 4 3 1&lt;br /&gt;
 3 1 2 4&lt;br /&gt;
 3 4 2 1&lt;br /&gt;
 4 2 1 3&lt;br /&gt;
 4 2 3 1&lt;br /&gt;
 4 3 1 2&lt;br /&gt;
 4 3 2 1&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
Intrare&lt;br /&gt;
 5&lt;br /&gt;
 7&lt;br /&gt;
consola&lt;br /&gt;
 Restricții neîndeplinite. Asigurați-vă că &lt;br /&gt;
 1 &amp;lt;= k &amp;lt;= n &amp;lt;= 9.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def este_permutare_valida(permutare, k):&lt;br /&gt;
    for i in range(1, len(permutare)):&lt;br /&gt;
        if abs(permutare[i] - permutare[i-1]) &amp;gt; k:&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def genereaza_permutari(n, k, permutare_curenta):&lt;br /&gt;
    if len(permutare_curenta) == n:&lt;br /&gt;
        if este_permutare_valida(permutare_curenta, k):&lt;br /&gt;
            print(&amp;quot; &amp;quot;.join(map(str, permutare_curenta)))&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    for numar in range(1, n + 1):&lt;br /&gt;
        if numar not in permutare_curenta:&lt;br /&gt;
            genereaza_permutari(n, k, permutare_curenta + [numar])&lt;br /&gt;
&lt;br /&gt;
def verifica_restrictii(n, k):&lt;br /&gt;
    return 1 &amp;lt;= k &amp;lt;= n &amp;lt;= 9&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n = int(input(&amp;quot;Introduceți n: &amp;quot;))&lt;br /&gt;
    k = int(input(&amp;quot;Introduceți k: &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    if verifica_restrictii(n, k):&lt;br /&gt;
        genereaza_permutari(n, k, [])&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Restricții neîndeplinite. Asigurați-vă că 1 &amp;lt;= k &amp;lt;= n &amp;lt;= 9.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3158_-_numere123&amp;diff=7615</id>
		<title>3158 - numere123</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3158_-_numere123&amp;diff=7615"/>
		<updated>2023-12-04T13:14:36Z</updated>

		<summary type="html">&lt;p&gt;Gabii: Pagină nouă: = Cerința = Se citește un număr natural &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; având cifrele diferite două câte două. Afișați în ordine crescătoare numerele care se pot obține din cifrele lui &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și care au același număr de cifre ca &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;.  = Date de intrare = Programul citește de la tastatură numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;.  = Date de ieșire = Programul va afișa pe ecran numerele cerute, câte unul pe fiecare rând.  = Restricții și precizări =  * &amp;lt;code&amp;gt;1 ≤ n...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cerința =&lt;br /&gt;
Se citește un număr natural &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; având cifrele diferite două câte două. Afișați în ordine crescătoare numerele care se pot obține din cifrele lui &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și care au același număr de cifre ca &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Programul citește de la tastatură numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Programul va afișa pe ecran numerele cerute, câte unul pe fiecare rând.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 1.000.000.000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; are toate cifrele distincte&lt;br /&gt;
&lt;br /&gt;
= Exemplul 2 =&lt;br /&gt;
Intrare&lt;br /&gt;
 483&lt;br /&gt;
Ieșire&lt;br /&gt;
 348&lt;br /&gt;
 384&lt;br /&gt;
 438&lt;br /&gt;
 483&lt;br /&gt;
 834&lt;br /&gt;
 843&lt;br /&gt;
&lt;br /&gt;
= Exemplul 2 =&lt;br /&gt;
Intrare&lt;br /&gt;
 443&lt;br /&gt;
consola&lt;br /&gt;
 Numărul trebuie să fie între 1 și 1.000.000.000 și să aibă cifre distincte.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def are_restrictii(n):&lt;br /&gt;
    return 1 &amp;lt;= n &amp;lt;= 1000000000 and len(set(str(n))) == len(str(n))&lt;br /&gt;
&lt;br /&gt;
def permuteaza_cifrele(cifre):&lt;br /&gt;
    if len(cifre) == 1:&lt;br /&gt;
        return [cifre]&lt;br /&gt;
&lt;br /&gt;
    permutari = []&lt;br /&gt;
    for i in range(len(cifre)):&lt;br /&gt;
        cifre_ramase = cifre[:i] + cifre[i + 1:]&lt;br /&gt;
        for p in permuteaza_cifrele(cifre_ramase):&lt;br /&gt;
            permutari.append([cifre[i]] + p)&lt;br /&gt;
&lt;br /&gt;
    return permutari&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    n = int(input(&amp;quot;Introduceți un număr n cu cifre distincte: &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    if not are_restrictii(n):&lt;br /&gt;
        print(&amp;quot;Numărul trebuie să fie între 1 și 1.000.000.000 și să aibă cifre distincte.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    cifre_str = str(n)&lt;br /&gt;
    cifre_lista = [int(cifra) for cifra in cifre_str]&lt;br /&gt;
    toate_permutările = permuteaza_cifrele(cifre_lista)&lt;br /&gt;
&lt;br /&gt;
    număr_cifre_n = len(cifre_lista)&lt;br /&gt;
&lt;br /&gt;
    numere_rezultate = []&lt;br /&gt;
    for permutare in toate_permutările:&lt;br /&gt;
        if permutare[0] != 0:  # Evităm numerele cu zero în frunte&lt;br /&gt;
            număr = int(&#039;&#039;.join(map(str, permutare)))&lt;br /&gt;
            if len(str(număr)) == număr_cifre_n:&lt;br /&gt;
                numere_rezultate.append(număr)&lt;br /&gt;
&lt;br /&gt;
    numere_rezultate.sort()&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;Numerele în ordine crescătoare cu aceleași cifre ca și n:&amp;quot;)&lt;br /&gt;
    for număr in numere_rezultate:&lt;br /&gt;
        print(număr)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3154_-_anagrame_pfv&amp;diff=7612</id>
		<title>3154 - anagrame pfv</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3154_-_anagrame_pfv&amp;diff=7612"/>
		<updated>2023-12-04T12:51:26Z</updated>

		<summary type="html">&lt;p&gt;Gabii: Pagină nouă: = Cerința = Se citește de la tastatură un cuvânt &amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt; format din cel mult &amp;lt;code&amp;gt;11&amp;lt;/code&amp;gt; litere mici distincte. Să se genereze în ordine alfabetică și să se afișeze toate anagramele cuvântului &amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt; în care vocalele sunt puncte fixe.  = Date de intrare = Programul citește de la tastatură cuvântul &amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt;.  = Date de ieșire = Programul va afișa pe ecran pe rânduri separate anagramele cuvântului citit în care vocalele rămân pe po...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cerința =&lt;br /&gt;
Se citește de la tastatură un cuvânt &amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt; format din cel mult &amp;lt;code&amp;gt;11&amp;lt;/code&amp;gt; litere mici distincte. Să se genereze în ordine alfabetică și să se afișeze toate anagramele cuvântului &amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt; în care vocalele sunt puncte fixe.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Programul citește de la tastatură cuvântul &amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Programul va afișa pe ecran pe rânduri separate anagramele cuvântului citit în care vocalele rămân pe pozițiile inițiale.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* cuvântul &amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt; are cel mult &amp;lt;code&amp;gt;11&amp;lt;/code&amp;gt; caractere și este format din litere mici distincte&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
Intrare&lt;br /&gt;
 dorel&lt;br /&gt;
Ieșire&lt;br /&gt;
 doler&lt;br /&gt;
 dorel&lt;br /&gt;
 loder&lt;br /&gt;
 lored&lt;br /&gt;
 rodel&lt;br /&gt;
 roled&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
Intrare&lt;br /&gt;
 guadalahara&lt;br /&gt;
consola&lt;br /&gt;
 Cuvântul trebuie să aibă cel mult 11 litere distincte.&lt;br /&gt;
&lt;br /&gt;
== Rezultat ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
from itertools import permutations&lt;br /&gt;
&lt;br /&gt;
def este_vocala(caracter):&lt;br /&gt;
    return caracter in &amp;quot;aeiou&amp;quot;&lt;br /&gt;
&lt;br /&gt;
def valideaza_cuvant(cuvant):&lt;br /&gt;
    return len(cuvant) &amp;lt;= 11 and len(set(cuvant)) == len(cuvant)&lt;br /&gt;
&lt;br /&gt;
def genereaza_anagrame(cuvant):&lt;br /&gt;
    vocale = [caracter for caracter in cuvant if este_vocala(caracter)]&lt;br /&gt;
    consoane = [caracter for caracter in cuvant if not este_vocala(caracter)]&lt;br /&gt;
&lt;br /&gt;
    vocale_unice = set(vocale)&lt;br /&gt;
    pozitii_vocale = {vocala: [i for i, caracter in enumerate(cuvant) if caracter == vocala] for vocala in vocale_unice}&lt;br /&gt;
&lt;br /&gt;
    anagrame = set()&lt;br /&gt;
&lt;br /&gt;
    for consoane_permutate in set(permutations(consoane)):&lt;br /&gt;
        anagrama_curenta = list(consoane_permutate)&lt;br /&gt;
&lt;br /&gt;
        for vocala in vocale_unice:&lt;br /&gt;
            for pozitie in pozitii_vocale[vocala]:&lt;br /&gt;
                anagrama_curenta.insert(pozitie, vocala)&lt;br /&gt;
&lt;br /&gt;
        anagrame.add(&amp;quot;&amp;quot;.join(anagrama_curenta))&lt;br /&gt;
&lt;br /&gt;
    return sorted(anagrame)&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    cuvant = input(&amp;quot;Introduceți cuvântul s: &amp;quot;).lower()&lt;br /&gt;
&lt;br /&gt;
    if valideaza_cuvant(cuvant):&lt;br /&gt;
        anagrame = genereaza_anagrame(cuvant)&lt;br /&gt;
&lt;br /&gt;
        for anagrama in anagrame:&lt;br /&gt;
            print(anagrama)&lt;br /&gt;
&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Cuvântul trebuie să aibă cel mult 11 litere distincte.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3916_-_elim_m&amp;diff=7611</id>
		<title>3916 - elim m</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3916_-_elim_m&amp;diff=7611"/>
		<updated>2023-12-04T12:45:28Z</updated>

		<summary type="html">&lt;p&gt;Gabii: Pagină nouă: = Cerința = Scrieți un program care citește două numere naturale &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; și care afișează cel mai mare număr care se poate obține eliminând din &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; exact &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; cifre, unde &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; este mai mic decât numărul de cifre ale lui &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;. Cifrele rămase în &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; nu-și pot schimba ordinea.  = Date de intrare = Programul citește de la tastatură numerele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;.  = Date de...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cerința =&lt;br /&gt;
Scrieți un program care citește două numere naturale &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; și care afișează cel mai mare număr care se poate obține eliminând din &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; exact &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; cifre, unde &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; este mai mic decât numărul de cifre ale lui &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;. Cifrele rămase în &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; nu-și pot schimba ordinea.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Programul citește de la tastatură numerele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Programul va afișa pe ecran numărul &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, reprezentând valoarea cerută.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; are cel mult &amp;lt;code&amp;gt;17&amp;lt;/code&amp;gt; cifre.&lt;br /&gt;
* &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; este mai mic decât numărul de cifre ale lui &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; este număr nenul.&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
Intrare&lt;br /&gt;
 3452234 4&lt;br /&gt;
Ieșire&lt;br /&gt;
 544&lt;br /&gt;
&lt;br /&gt;
= Exemplul 2 =&lt;br /&gt;
Intrare&lt;br /&gt;
 58435983264732647264912647362498236496324723684 21&lt;br /&gt;
Consola&lt;br /&gt;
 Introduceți numere valide conform restricțiilor.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def valideaza_restricții(n, m):&lt;br /&gt;
    return 0 &amp;lt; m &amp;lt; len(str(n)) &amp;lt;= 17 and n &amp;gt;= 0&lt;br /&gt;
&lt;br /&gt;
def cel_mai_mare_numar(n, m):&lt;br /&gt;
    cifre = [int(cifra) for cifra in str(n)]&lt;br /&gt;
&lt;br /&gt;
    cifre.sort(reverse=True)&lt;br /&gt;
    cifre = cifre[:-m]&lt;br /&gt;
&lt;br /&gt;
    rezultat = int(&#039;&#039;.join(map(str, cifre)))&lt;br /&gt;
    return rezultat&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    try:&lt;br /&gt;
        n = int(input(&amp;quot;Introduceți n: &amp;quot;))&lt;br /&gt;
        m = int(input(&amp;quot;Introduceți m: &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
        if not valideaza_restricții(n, m):&lt;br /&gt;
            print(&amp;quot;Introduceți numere valide conform restricțiilor.&amp;quot;)&lt;br /&gt;
            return&lt;br /&gt;
&lt;br /&gt;
        if len(str(n)) &amp;gt; 17:&lt;br /&gt;
            print(&amp;quot;Numărul introdus depășește lungimea maximă admisă de 17 cifre.&amp;quot;)&lt;br /&gt;
            return&lt;br /&gt;
&lt;br /&gt;
        rezultat = cel_mai_mare_numar(n, m)&lt;br /&gt;
        print(f&amp;quot;Cel mai mare număr obținut eliminând exact {m} cifre din {n} este: {rezultat}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Introduceți numere valide.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3149_-_anagrame_vocale&amp;diff=7609</id>
		<title>3149 - anagrame vocale</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3149_-_anagrame_vocale&amp;diff=7609"/>
		<updated>2023-12-04T12:31:12Z</updated>

		<summary type="html">&lt;p&gt;Gabii: Pagină nouă: = Cerința = Se citește un cuvânt format din cel puțin două și cel mult zece caractere litere mici distincte care conține cel puțin două vocale. Afișați în ordine lexicografică anagramele cuvântului citit care au proprietatea că încep și se termină cu o vocală.  = Date de intrare = Programul citește de la tastatură șirul de caractere.  = Date de ieșire = Programul va afișa pe ecran anagramele cerute, câte una pe un rând.  = Restricții și precizări...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cerința =&lt;br /&gt;
Se citește un cuvânt format din cel puțin două și cel mult zece caractere litere mici distincte care conține cel puțin două vocale. Afișați în ordine lexicografică anagramele cuvântului citit care au proprietatea că încep și se termină cu o vocală.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Programul citește de la tastatură șirul de caractere.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Programul va afișa pe ecran anagramele cerute, câte una pe un rând.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* numărul de caractere ale șirului dat este cuprins între &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt;;&lt;br /&gt;
* cuvântul dat este format din litere mici distincte și conține cel puțin două vocale;&lt;br /&gt;
* vocalele sunt &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;e&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;o&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;u&amp;lt;/code&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
Intrare&lt;br /&gt;
 alin&lt;br /&gt;
Ieșire&lt;br /&gt;
 alni&lt;br /&gt;
 anli&lt;br /&gt;
 ilna&lt;br /&gt;
 inla&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
Intrare&lt;br /&gt;
 arc&lt;br /&gt;
consola&lt;br /&gt;
 Cuvântul trebuie să aibă între 2 și 10 litere mici distincte și să conțină cel puțin două vocale.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def este_anagrama_valida(cuvant):&lt;br /&gt;
    # Verificăm dacă cuvântul începe și se termină cu o vocală&lt;br /&gt;
    return cuvant[0] in &#039;aeiou&#039; and cuvant[-1] in &#039;aeiou&#039;&lt;br /&gt;
&lt;br /&gt;
def genereaza_anagrame(curent, ramase, rezultat):&lt;br /&gt;
    if not ramase:&lt;br /&gt;
        if este_anagrama_valida(curent):&lt;br /&gt;
            rezultat.append(curent)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    for i in range(len(ramase)):&lt;br /&gt;
        genereaza_anagrame(curent + ramase[i], ramase[:i] + ramase[i+1:], rezultat)&lt;br /&gt;
&lt;br /&gt;
def valideaza_cuvant(cuvant):&lt;br /&gt;
    # Verificăm restricțiile&lt;br /&gt;
    return 2 &amp;lt;= len(cuvant) &amp;lt;= 10 and len(set(cuvant)) == len(cuvant) and sum(1 for char in cuvant if char in &#039;aeiou&#039;) &amp;gt;= 2&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim cuvântul de la tastatură&lt;br /&gt;
        cuvant = input(&amp;quot;Introduceți un cuvânt: &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        # Verificăm restricțiile utilizând funcția separată&lt;br /&gt;
        if not valideaza_cuvant(cuvant):&lt;br /&gt;
            print(&amp;quot;Cuvântul trebuie să aibă între 2 și 10 litere mici distincte și să conțină cel puțin două vocale.&amp;quot;)&lt;br /&gt;
            return&lt;br /&gt;
&lt;br /&gt;
        # Inițializăm o listă pentru a stoca anagramele rezultate&lt;br /&gt;
        anagrame = []&lt;br /&gt;
&lt;br /&gt;
        # Generăm anagramele cuvântului care încep și se termină cu o vocală&lt;br /&gt;
        genereaza_anagrame(&#039;&#039;, cuvant, anagrame)&lt;br /&gt;
&lt;br /&gt;
        # Sortăm și afișăm anagramele&lt;br /&gt;
        for anagrama in sorted(anagrame):&lt;br /&gt;
            print(anagrama)&lt;br /&gt;
&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        print(f&amp;quot;A intervenit o eroare: {e}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3915_-_anagrame_cv&amp;diff=7607</id>
		<title>3915 - anagrame cv</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3915_-_anagrame_cv&amp;diff=7607"/>
		<updated>2023-12-04T12:25:25Z</updated>

		<summary type="html">&lt;p&gt;Gabii: Pagină nouă: = Cerința = Se citește de la tastatură un cuvânt &amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt; format din cel mult &amp;lt;code&amp;gt;11&amp;lt;/code&amp;gt; litere mici distincte. Să se genereze în ordine alfabetică și să se afișeze toate anagramele cuvântului &amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt; în care nu există două vocale alăturate și nici două consoane alăturate.  = Date de intrare = Programul citește de la tastatură cuvântul &amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt;.  = Date de ieșire = Programul va afișa pe ecran pe rânduri separate anagramele cuvâ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cerința =&lt;br /&gt;
Se citește de la tastatură un cuvânt &amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt; format din cel mult &amp;lt;code&amp;gt;11&amp;lt;/code&amp;gt; litere mici distincte. Să se genereze în ordine alfabetică și să se afișeze toate anagramele cuvântului &amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt; în care nu există două vocale alăturate și nici două consoane alăturate.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Programul citește de la tastatură cuvântul &amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Programul va afișa pe ecran pe rânduri separate anagramele cuvântului citit în care vocalele și consoanele alternează (nu există două vocale alăturate și nici două consoane alăturate).&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* cuvântul &amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt; are cel mult &amp;lt;code&amp;gt;11&amp;lt;/code&amp;gt; caractere și este format din litere mici distincte&lt;br /&gt;
* dacă nu există soluții, atunci se va afișa mesajul &amp;lt;code&amp;gt;IMPOSIBIL&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
Intrare&lt;br /&gt;
 cosmina&lt;br /&gt;
Ieșire&lt;br /&gt;
 caminos&lt;br /&gt;
 camison&lt;br /&gt;
 camonis&lt;br /&gt;
 camosin&lt;br /&gt;
 canimos&lt;br /&gt;
 canisom&lt;br /&gt;
 canomis&lt;br /&gt;
 canosim&lt;br /&gt;
 casimon&lt;br /&gt;
 casinom&lt;br /&gt;
 casomin&lt;br /&gt;
 casonim&lt;br /&gt;
 cimanos&lt;br /&gt;
 cimason&lt;br /&gt;
 cimonas&lt;br /&gt;
 cimosan&lt;br /&gt;
 cinamos&lt;br /&gt;
 cinasom&lt;br /&gt;
 cinomas&lt;br /&gt;
 cinosam&lt;br /&gt;
 ...&lt;br /&gt;
 sonimac&lt;br /&gt;
 (în total 144 de anagrame)&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
Intrare&lt;br /&gt;
 cosmin&lt;br /&gt;
Ieșire&lt;br /&gt;
 IMPOSIBIL&lt;br /&gt;
&lt;br /&gt;
== Exemplu: ==&lt;br /&gt;
Intrare&lt;br /&gt;
 ana&lt;br /&gt;
consola&lt;br /&gt;
 Cuvântul trebuie să aibă cel mult 11 litere mici distincte.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def sunt_alternante(cuvant):&lt;br /&gt;
    # Verificăm dacă vocalele și consoanele alternează în cuvânt&lt;br /&gt;
    for i in range(1, len(cuvant)):&lt;br /&gt;
        if (cuvant[i-1] in &#039;aeiou&#039; and cuvant[i] in &#039;aeiou&#039;) or (cuvant[i-1] not in &#039;aeiou&#039; and cuvant[i] not in &#039;aeiou&#039;):&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def genereaza_anagrame_alternante(curent, ramase, rezultat):&lt;br /&gt;
    if not ramase:&lt;br /&gt;
        if sunt_alternante(curent):&lt;br /&gt;
            rezultat.append(curent)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    for i in range(len(ramase)):&lt;br /&gt;
        genereaza_anagrame_alternante(curent + ramase[i], ramase[:i] + ramase[i+1:], rezultat)&lt;br /&gt;
&lt;br /&gt;
def valideaza_cuvant(cuvant):&lt;br /&gt;
    # Verificăm restricțiile&lt;br /&gt;
    return 1 &amp;lt;= len(cuvant) &amp;lt;= 11 and len(set(cuvant)) == len(cuvant) and cuvant.islower()&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim cuvântul de la tastatură&lt;br /&gt;
        cuvant = input(&amp;quot;Introduceți un cuvânt: &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        # Verificăm restricțiile utilizând funcția separată&lt;br /&gt;
        if not valideaza_cuvant(cuvant):&lt;br /&gt;
            print(&amp;quot;Cuvântul trebuie să aibă cel mult 11 litere mici distincte.&amp;quot;)&lt;br /&gt;
            return&lt;br /&gt;
&lt;br /&gt;
        # Inițializăm o listă pentru a stoca anagramele rezultate&lt;br /&gt;
        anagrame = []&lt;br /&gt;
&lt;br /&gt;
        # Generăm anagramele cuvântului în care vocalele și consoanele alternează&lt;br /&gt;
        genereaza_anagrame_alternante(&#039;&#039;, cuvant, anagrame)&lt;br /&gt;
&lt;br /&gt;
        # Sortăm și afișăm anagramele sau afișăm mesajul IMPOSIBIL dacă nu există soluții&lt;br /&gt;
        if anagrame:&lt;br /&gt;
            for anagrama in sorted(anagrame):&lt;br /&gt;
                print(anagrama)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;IMPOSIBIL&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        print(f&amp;quot;A intervenit o eroare: {e}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0194_-_Anagrame1&amp;diff=7606</id>
		<title>0194 - Anagrame1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0194_-_Anagrame1&amp;diff=7606"/>
		<updated>2023-12-04T12:13:04Z</updated>

		<summary type="html">&lt;p&gt;Gabii: Pagină nouă:  == Enunț == Se numește &amp;#039;&amp;#039;anagramă&amp;#039;&amp;#039; a unui cuvânt dat, un alt cuvânt ce conține toate literele primului, eventual în altă ordine.  = Cerinţa = Se dă un cuvânt din cel mult &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; litere distincte. Să se afișeze, în ordine alfabetică, toate anagramele acestui cuvânt.  = Date de intrare = Fişierul de intrare &amp;lt;code&amp;gt;anagrameIN.txt&amp;lt;/code&amp;gt; conţine pe pe prima linie un cuvânt &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt;, format din cel mult &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; litere distincte ale alfabetu...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Enunț ==&lt;br /&gt;
Se numește &#039;&#039;anagramă&#039;&#039; a unui cuvânt dat, un alt cuvânt ce conține toate literele primului, eventual în altă ordine.&lt;br /&gt;
&lt;br /&gt;
= Cerinţa =&lt;br /&gt;
Se dă un cuvânt din cel mult &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; litere distincte. Să se afișeze, în ordine alfabetică, toate anagramele acestui cuvânt.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fişierul de intrare &amp;lt;code&amp;gt;anagrameIN.txt&amp;lt;/code&amp;gt; conţine pe pe prima linie un cuvânt &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt;, format din cel mult &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; litere distincte ale alfabetului englez.&lt;br /&gt;
&lt;br /&gt;
= Date de ieşire =&lt;br /&gt;
Fişierul de ieşire &amp;lt;code&amp;gt;anagrameOUT.txt&amp;lt;/code&amp;gt; va conţine toate anagramele cuvântului &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt;, fiecare pe o linie, în ordine alfabetică.&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
&amp;lt;code&amp;gt;anagrameIN.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cal&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;anagrameOUT.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 acl&lt;br /&gt;
 alc&lt;br /&gt;
 cal&lt;br /&gt;
 cla&lt;br /&gt;
 lac&lt;br /&gt;
 lca&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
&amp;lt;code&amp;gt;anagrameIN.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 4tal&lt;br /&gt;
consola&lt;br /&gt;
 Cuvântul trebuie să aibă între 1 și 8 litere și să nu conțină numere.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
from itertools import permutations&lt;br /&gt;
&lt;br /&gt;
def generate_anagrams(word):&lt;br /&gt;
    # Generăm toate permutările cuvântului&lt;br /&gt;
    all_permutations = permutations(word)&lt;br /&gt;
&lt;br /&gt;
    # Sortăm permutările în ordine alfabetică&lt;br /&gt;
    sorted_anagrams = sorted(set(&#039;&#039;.join(perm) for perm in all_permutations))&lt;br /&gt;
&lt;br /&gt;
    return sorted_anagrams&lt;br /&gt;
&lt;br /&gt;
def validate_word(word):&lt;br /&gt;
    # Verificăm restricțiile&lt;br /&gt;
    return 1 &amp;lt;= len(word) &amp;lt;= 8 and word.isalpha()&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim cuvântul din fișierul de intrare&lt;br /&gt;
        with open(&amp;quot;anagrameIN.txt&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
            word = file.readline().strip()&lt;br /&gt;
&lt;br /&gt;
        # Verificăm restricțiile utilizând funcția separată&lt;br /&gt;
        if not validate_word(word):&lt;br /&gt;
            print(&amp;quot;Cuvântul trebuie să aibă între 1 și 8 litere și să nu conțină numere.&amp;quot;)&lt;br /&gt;
            return&lt;br /&gt;
&lt;br /&gt;
        # Generăm anagramele&lt;br /&gt;
        anagrams = generate_anagrams(word)&lt;br /&gt;
&lt;br /&gt;
        # Scriem anagramele în fișierul de ieșire&lt;br /&gt;
        with open(&amp;quot;anagrameOUT.txt&amp;quot;, &amp;quot;w&amp;quot;) as file:&lt;br /&gt;
            for anagram in anagrams:&lt;br /&gt;
                file.write(anagram + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        print(f&amp;quot;A intervenit o eroare: {e}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gabii</name></author>
	</entry>
</feed>