<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=2732_%E2%80%93_Succesor</id>
	<title>2732 – Succesor - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=2732_%E2%80%93_Succesor"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2732_%E2%80%93_Succesor&amp;action=history"/>
	<updated>2026-05-01T05:55:29Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2732_%E2%80%93_Succesor&amp;diff=3729&amp;oldid=prev</id>
		<title>Miriam: tot</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2732_%E2%80%93_Succesor&amp;diff=3729&amp;oldid=prev"/>
		<updated>2023-04-15T21:14:03Z</updated>

		<summary type="html">&lt;p&gt;tot&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/2732/succesor Succesor]&lt;br /&gt;
----&lt;br /&gt;
==Cerinţă==&lt;br /&gt;
Se consideră vectorul ordonat strict crescător sir &amp;lt;code&amp;gt;= (sir[1], sir[2], ..., sir[k])&amp;lt;/code&amp;gt; ce memorează o submulțime de &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; elemente a mulțimii &amp;lt;code&amp;gt;{1, 2, ..., n}&amp;lt;/code&amp;gt;. Trebuie determinată următoarea submulțime din punct de vedere lexicografic. De exemplu, dacă &amp;lt;code&amp;gt;n=4&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;k=3&amp;lt;/code&amp;gt;, atunci submulțimile de trei elemente, în ordine lexicografică, sunt: &amp;lt;code&amp;gt;{1,2,3}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;{1,2,4}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;{1,3,4}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;{2,3,4}&amp;lt;/code&amp;gt;.&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Programul va citi de la tastatură valoarea&amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;,  apoi k, apoi &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere întregi reprezentând elementele șirului.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele introduse sunt corecte!&amp;quot;, apoi se va afișa noul vector, obținut în urma determinării următoarei submulțimi din punct de vedere lexicografic. În cazul în care datele nu respectă restricțiile, se va afișa mesajul &amp;quot;Datele introduse nu sunt corecte!&amp;quot;.&lt;br /&gt;
==Restricţii şi precizări==&lt;br /&gt;
*1 &amp;lt; k &amp;lt; n &amp;lt; 30.000&lt;br /&gt;
*valorile elementelor șirului vor fi  &amp;lt; 1.000.000.000&lt;br /&gt;
==Exemple==&lt;br /&gt;
===Exemplul 1===&lt;br /&gt;
;Intrare&lt;br /&gt;
:Introduceti elementul n: 9&lt;br /&gt;
:Introduceti numarul de elemente a sirului: 5&lt;br /&gt;
:Introduceti 5 numere separate prin spatiu:2 4 5 8 9&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele introduse sunt corecte!&lt;br /&gt;
:[2, 4, 6, 7, 8]&lt;br /&gt;
===Exemplul 2===&lt;br /&gt;
;Intrare&lt;br /&gt;
:Introduceti elementul n: 10&lt;br /&gt;
:Introduceti numarul de elemente a sirului: 2&lt;br /&gt;
:Introduceti 2 numere separate prin spatiu:14 12 3&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele introduse sunt incorecte!&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def is_integer(value):&lt;br /&gt;
    return value.isdigit()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def verificare_nr_elemente(k, n):&lt;br /&gt;
    if is_integer(k):&lt;br /&gt;
        if 1 &amp;lt; int(k) &amp;lt;= int(n):&lt;br /&gt;
            return k&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Datele introduse sunt incorecte!&amp;quot;)&lt;br /&gt;
            exit()&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele introduse sunt incorecte!&amp;quot;)&lt;br /&gt;
        exit()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def verif_ordonare(lst):&lt;br /&gt;
    for i in range(1, len(lst)):&lt;br /&gt;
        if lst[i] &amp;lt; lst[i-1]:&lt;br /&gt;
            print(&amp;quot;Datele introduse sunt incorecte!&amp;quot;)&lt;br /&gt;
            exit()&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def verificare_vector(k, vector, n):&lt;br /&gt;
    if len(vector) != int(k):&lt;br /&gt;
        print(&amp;quot;Datele introduse sunt incorecte!&amp;quot;)&lt;br /&gt;
        exit()&lt;br /&gt;
    else:&lt;br /&gt;
        for i in vector:&lt;br /&gt;
            if is_integer(i):&lt;br /&gt;
                if 1 &amp;lt;= int(i) &amp;lt;= int(n):&lt;br /&gt;
                    continue&lt;br /&gt;
                else:&lt;br /&gt;
                    print(&amp;quot;Datele introduse sunt incorecte!&amp;quot;)&lt;br /&gt;
                    exit()&lt;br /&gt;
            else:&lt;br /&gt;
                print(&amp;quot;Datele introduse sunt incorecte!&amp;quot;)&lt;br /&gt;
                exit()&lt;br /&gt;
    verif_ordonare(vector)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def verificare_n(n):&lt;br /&gt;
    if is_integer(n):&lt;br /&gt;
        if 2 &amp;lt;= int(n) &amp;lt;= 30000:&lt;br /&gt;
            return n&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Datele introduse sunt incorecte!&amp;quot;)&lt;br /&gt;
            exit()&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele introduse sunt incorecte!&amp;quot;)&lt;br /&gt;
        exit()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def succesor(sir, n, k):&lt;br /&gt;
    i = k - 1&lt;br /&gt;
    while i &amp;gt;= 0 and sir[i] == n - k + i + 1:&lt;br /&gt;
        i -= 1&lt;br /&gt;
    if i &amp;gt;= 0:&lt;br /&gt;
        sir[i] += 1&lt;br /&gt;
        for j in range(i+1, k):&lt;br /&gt;
            sir[j] = sir[j-1] + 1&lt;br /&gt;
    print(sir)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;#039;__main__&amp;#039;:&lt;br /&gt;
    n = input(&amp;quot;Introduceti elementul n: &amp;quot;)&lt;br /&gt;
    verificare_n(n)&lt;br /&gt;
    k = input(&amp;quot;Introduceti numarul de elemente a sirului: &amp;quot;)&lt;br /&gt;
    verificare_nr_elemente(k,n)&lt;br /&gt;
    elem = input(f&amp;quot;Introduceti {k} numere separate prin spatiu:&amp;quot;).split()&lt;br /&gt;
    verificare_vector(k, elem, n)&lt;br /&gt;
    lst_int = list(map(int, elem))&lt;br /&gt;
    print(&amp;quot;Datele introduse sunt corecte!&amp;quot;)&lt;br /&gt;
    succesor(lst_int, int(n), int(k))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Explicație rezolvare==&lt;br /&gt;
Funcția &amp;lt;code&amp;gt;is_integer(value)&amp;lt;/code&amp;gt; verifică dacă valoarea &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; este un număr întreg, returnând &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt; dacă este și &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt; în caz contrar.&lt;br /&gt;
&lt;br /&gt;
Funcția &amp;lt;code&amp;gt;verificare_nr_elemente(k, n)&amp;lt;/code&amp;gt; verifică dacă numărul &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; este un număr întreg și se află între 1 și &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, returnând &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; în cazul în care este valid, iar în caz contrar, afișează un mesaj de eroare și iese din program cu &amp;lt;code&amp;gt;exit()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Funcția &amp;lt;code&amp;gt;verif_ordonare(lst)&amp;lt;/code&amp;gt; verifică dacă elementele listei &amp;lt;code&amp;gt;lst&amp;lt;/code&amp;gt; sunt în ordine crescătoare, comparând fiecare element cu elementul anterior. În cazul în care nu sunt în ordine crescătoare, afișează un mesaj de eroare și iese din program cu &amp;lt;code&amp;gt;exit()&amp;lt;/code&amp;gt;. Dacă toate elementele sunt în ordine crescătoare, returnează &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Funcția &amp;lt;code&amp;gt;verificare_vector(k, vector, n)&amp;lt;/code&amp;gt; verifică dacă lungimea listei &amp;lt;code&amp;gt;vector&amp;lt;/code&amp;gt; este egală cu &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; și dacă toate elementele sunt întregi și se află între 1 și &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;. Dacă există elemente invalide sau lista nu este ordonată crescător, afișează un mesaj de eroare și iese din program cu &amp;lt;code&amp;gt;exit()&amp;lt;/code&amp;gt;. Dacă toate elementele sunt valide și lista este ordonată crescător, funcția se încheie cu succes.&lt;br /&gt;
&lt;br /&gt;
Funcția &amp;lt;code&amp;gt;verificare_n(n)&amp;lt;/code&amp;gt; verifică dacă numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; este un număr întreg și se află între 2 și 30000, returnând &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; în cazul în care este valid, iar în caz contrar, afișează un mesaj de eroare și iese din program cu &amp;lt;code&amp;gt;exit()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Funcția &amp;lt;code&amp;gt;succesor(sir, n, k)&amp;lt;/code&amp;gt; primește lista &amp;lt;code&amp;gt;sir&amp;lt;/code&amp;gt;, reprezentând submulțimea de &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; elemente din mulțimea {1,2,...,n}, și returnează succesorul lexicografic al acestei submulțimi, adică următoarea submulțime de &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; elemente din mulțimea {1,2,...,n}, ordonată crescător. Pentru a găsi succesorul, se parcurge lista de la dreapta la stânga și se caută prima poziție &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; pentru care &amp;lt;code&amp;gt;sir[i]&amp;lt;/code&amp;gt; nu este egal cu &amp;lt;code&amp;gt;n - k + i + 1&amp;lt;/code&amp;gt;. Dacă se găsește o astfel de poziție, se incrementează &amp;lt;code&amp;gt;sir[i]&amp;lt;/code&amp;gt; cu 1 și se ajustează restul elementelor astfel încât să formeze o submulțime ordonată crescător. Dacă nu există o astfel de poziție, submulțimea inițială era deja maximă și succesorul nu există.&lt;br /&gt;
&lt;br /&gt;
În &amp;lt;code&amp;gt;if __name__ == &amp;#039;__main__&amp;#039;:&amp;lt;/code&amp;gt;, se citesc valorile &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;, se verifică dacă sunt valide folosind funcțiile &amp;lt;code&amp;gt;verificare_n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;verificare_nr_elemente&amp;lt;/code&amp;gt;, apoi se citește lista &amp;lt;code&amp;gt;elem&amp;lt;/code&amp;gt; și se verifică folosind funcția verif_ordonare. Aceasta parcurge elementele vectorului și verifică dacă fiecare element este mai mare sau egal cu cel anterior. Dacă se găsește un element care nu respectă această condiție, programul afișează mesajul &amp;quot;Datele introduse sunt incorecte!&amp;quot; și se oprește cu exit().&lt;br /&gt;
&lt;br /&gt;
În continuare, se verifică elementele vectorului dacă respectă intervalul impus, adică să fie între 1 și n, folosind funcția verificare_vector. Dacă un element nu se încadrează în acest interval, programul afișează mesajul &amp;quot;Datele introduse sunt incorecte!&amp;quot; și se oprește cu exit().&lt;br /&gt;
&lt;br /&gt;
Se afișează mesajul &amp;quot;Datele introduse sunt corecte!&amp;quot; și se apelează funcția succesor, care primește ca parametri vectorul, n și k. Funcția calculează succesorul submulțimii memorate inițial în vectorul a și afișează rezultatul.&lt;/div&gt;</summary>
		<author><name>Miriam</name></author>
	</entry>
</feed>