2709 - Excursie2: Diferență între versiuni

De la Universitas MediaWiki
 
(Nu s-au afișat 11 versiuni intermediare efectuate de același utilizator)
Linia 3: Linia 3:
Se organizează o excursie cu n participanți cu numere de ordine unice de la 1 la n pentru care se folosesc 3 mijloace de transport. Să se determine dacă se pot aranja participanții astfel încât suma numerelor de ordine din cele trei mașini să fie aceeași. Dacă este posibilă aranjarea, se vor afișa pe 3 linii numerele de ordine separate prin spații, numerele dintr-o mașină pe câte un rând, altfel se afișează NU.
Se organizează o excursie cu n participanți cu numere de ordine unice de la 1 la n pentru care se folosesc 3 mijloace de transport. Să se determine dacă se pot aranja participanții astfel încât suma numerelor de ordine din cele trei mașini să fie aceeași. Dacă este posibilă aranjarea, se vor afișa pe 3 linii numerele de ordine separate prin spații, numerele dintr-o mașină pe câte un rând, altfel se afișează NU.
== Date de intrare ==
== Date de intrare ==
Fișierul de intrare '''numere18.in''' conține pe prima linie un număr natural '''C''' reprezentând cerința din problemă care trebuie rezolvată (1 sau 2).
Programul citește de la tastatură numărul '''n'''.
 
Dacă '''C''' este egal cu '''1''', a doua linie din fișier conține un număr natural '''n''', reprezentând numărul liniei pe care trebuie să se calculeze suma.
 
Dacă '''C''' este egal cu '''2''', a doua linie din fișier conține numărul natural '''m''', reprezentând numărul care trebuie căutat în triunghi.


== Date de ieșire ==  
== Date de ieșire ==  
Fișierul de ieșire '''numere18.out''' va conține o singură linie. Dacă '''C=1''', va fi scrisă suma cerută la punctul 1. Dacă '''C=2''', vor fi scrise nouă numere: linia pe care a află numărul '''m''', respectiv poziția acestuia pe această linie, separate printr-un spațiu.
Programul va afișa pe ecran, mesajul "Datele introduse corespund cerințelor" și pe o linie nouă se vor afișa pe 3 linii numerele de ordine separate prin spații, numerele dintr-o mașină pe câte un rând. În caz contrar programul va afișa pe o linie noua mesajul '''NU''' și mesajul "Datele introduse nu corespund cerintelor."


== Restricţii şi precizări ==
== Restricţii şi precizări ==
* 1 ⩽ '''n''' ⩽ 1000
* 1 ⩽ '''n''' ⩽ 1001
* 1 ⩽ '''m''' ⩽ 1.000.000.000
* ordinea afișării nu contează atât timp cât ea este corectă.


== Exemplul 1 ==
== Exemplul 1 ==
; Intrare
; Intrare
: ''numere18.in''
: Introduceti numar: 7
: 1
: 4
; Ieșire
; Ieșire
: ''numere18.out''
: Datele introduse nu corespund cerintelor
: 34
: NU
<br>
<br>


== Exemplul 2 ==
== Exemplul 2 ==
; Intrare
; Intrare
: ''numere18.in''
: Introduceti numar: 5
: 2
: 9
; Ieșire
; Ieșire
: ''numere18.out''
: 5
: 4 3
: 2 3
: 1 4  
: Datele introduse corespund cerintelor
<br>
<br>


Linia 74: Linia 68:
def validate_input(n):
def validate_input(n):
     if n < 1 or n > 1001 or (n < 5 or n * (n + 1) % 3):
     if n < 1 or n > 1001 or (n < 5 or n * (n + 1) % 3):
        print("Datele introduse nu corespund cerintelor.")
         print("NU")
         print("NU")
         return False
         return False
Linia 79: Linia 74:




def main():
if __name__ == "__main__":
     n = int(input("Introduceti numar: "))
     n = int(input("Introduceti numar: "))
     if not validate_input(n):
     if not validate_input(n):
         return
         exit()


     if (n - 9) % 6 == 0:
     if (n - 9) % 6 == 0:
Linia 109: Linia 104:
     print("\nDatele introduse corespund cerintelor.")
     print("\nDatele introduse corespund cerintelor.")
     print()
     print()
main()
</syntaxhighlight>
</syntaxhighlight>


== Explicatie rezolvare ==
== Explicatie rezolvare ==
Acest program citeste un numar '''n''' si verifica daca respecta anumite conditii, apoi afiseaza anumite secvente de numere in functie de valoarea acestuia. Daca numarul '''n''' este valid, programul determina valoarea lui '''s''' si '''x''' in functie de formula specificata si afiseaza trei secvente de numere, folosind functiile "print_first_sequence", '''print_second_sequence''' si '''print_third_sequence'''. Aceste functii afiseaza anumite numere in functie de valoarea lui '''s'''.

Versiunea curentă din 29 aprilie 2023 10:34

Sursa: [1]

Cerinţa

Se organizează o excursie cu n participanți cu numere de ordine unice de la 1 la n pentru care se folosesc 3 mijloace de transport. Să se determine dacă se pot aranja participanții astfel încât suma numerelor de ordine din cele trei mașini să fie aceeași. Dacă este posibilă aranjarea, se vor afișa pe 3 linii numerele de ordine separate prin spații, numerele dintr-o mașină pe câte un rând, altfel se afișează NU.

Date de intrare

Programul citește de la tastatură numărul n.

Date de ieșire

Programul va afișa pe ecran, mesajul "Datele introduse corespund cerințelor" și pe o linie nouă se vor afișa pe 3 linii numerele de ordine separate prin spații, numerele dintr-o mașină pe câte un rând. În caz contrar programul va afișa pe o linie noua mesajul NU și mesajul "Datele introduse nu corespund cerintelor."

Restricţii şi precizări

  • 1 ⩽ n ⩽ 1001
  • ordinea afișării nu contează atât timp cât ea este corectă.

Exemplul 1

Intrare
Introduceti numar: 7
Ieșire
Datele introduse nu corespund cerintelor
NU


Exemplul 2

Intrare
Introduceti numar: 5
Ieșire
5
2 3
1 4
Datele introduse corespund cerintelor


Rezolvare

#2709
def print_first_sequence(s):
    if s == 10:
        print("1 2 3 4 5 ", end="")
    elif s == 9:
        print("1 2 3 6 ", end="")
    elif s == 7:
        print("3 4 ", end="")
    elif s == 6:
        print("5 ", end="")


def print_second_sequence(s):
    if s == 10:
        print("7 8 ", end="")
    elif s == 9:
        print("5 7 ", end="")
    elif s == 7:
        print("2 5 ", end="")
    elif s == 6:
        print("2 3 ", end="")


def print_third_sequence(s):
    if s == 10:
        print("6 9 ", end="")
    elif s == 9:
        print("4 8 ", end="")
    elif s == 7:
        print("1 6 ", end="")
    elif s == 6:
        print("1 4 ", end="")


def validate_input(n):
    if n < 1 or n > 1001 or (n < 5 or n * (n + 1) % 3):
        print("Datele introduse nu corespund cerintelor.")
        print("NU")
        return False
    return True


if __name__ == "__main__":
    n = int(input("Introduceti numar: "))
    if not validate_input(n):
        exit()

    if (n - 9) % 6 == 0:
        s, x = 10, (n - 9) // 6
    elif (n - 8) % 6 == 0:
        s, x = 9, (n - 8) // 6
    elif (n - 6) % 6 == 0:
        s, x = 7, (n - 6) // 6
    elif (n - 5) % 6 == 0:
        s, x = 6, (n - 5) // 6

    print_first_sequence(s)
    for i in range(x):
        print(s + 6 * i, s + 5 + 6 * i, end=" ")
    print()

    print_second_sequence(s)
    for i in range(x):
        print(s + 1 + 6 * i, s + 4 + 6 * i, end=" ")
    print()

    print_third_sequence(s)
    for i in range(x):
        print(s + 2 + 6 * i, s + 3 + 6 * i, end=" ")

    print("\nDatele introduse corespund cerintelor.")
    print()

Explicatie rezolvare

Acest program citeste un numar n si verifica daca respecta anumite conditii, apoi afiseaza anumite secvente de numere in functie de valoarea acestuia. Daca numarul n este valid, programul determina valoarea lui s si x in functie de formula specificata si afiseaza trei secvente de numere, folosind functiile "print_first_sequence", print_second_sequence si print_third_sequence. Aceste functii afiseaza anumite numere in functie de valoarea lui s.