2709 - Excursie2: Difference between revisions

From Bitnami MediaWiki
Dragos1234 (talk | contribs)
Pagină nouă: Sursa: [https://www.pbinfo.ro/probleme/2709/excursie2] == 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,...
 
Dragos1234 (talk | contribs)
Line 74: Line 74:
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")
         return False
         return False
     return True
     return True

Revision as of 11:27, 9 April 2023

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

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).

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

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.

Restricţii şi precizări

  • 1 ⩽ n ⩽ 1000
  • 1 ⩽ m ⩽ 1.000.000.000

Exemplul 1

Intrare
numere18.in
1
4
Ieșire
numere18.out
34


Exemplul 2

Intrare
numere18.in
2
9
Ieșire
numere18.out
4 3


Rezolvare

<syntaxhighlight lang="python" line>

  1. 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("NU")
       return False
   return True


def main():

   n = int(input("Introduceti numar: "))
   if not validate_input(n):
       return
   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()

main() </syntaxhighlight>

Explicatie rezolvare