1932 - PC: Difference between revisions

From Bitnami MediaWiki
Paul Ungur (talk | contribs)
Pagină nouă: ==Cerința== Gigel vrea un calculator nou care are prețul <span style=“color: red”> x</span>. Tatăl acestuia, fiind profesor de matematica, i-a spus ca îi va cumpăra calculatorul dacă prețul <span style=“color: red”> x</span> al acestuia este norocos. Un număr <span style=“color: red”> x</span> este norocos dacă pătratul acestuia se poate scrie ca sumă de <span style=“color: red”> x</span> numere consecutive. De exemplu, <span style=“color: red”>...
 
Paul Ungur (talk | contribs)
No edit summary
Line 15: Line 15:
==Exemplu:==
==Exemplu:==
<span style=“color: red”> pc.in</span>
<span style=“color: red”> pc.in</span>
3
def validare(n, nums):
3 4 7
    if not (1 <= n <= 2_000_000_000):
        return False
    if not all(0 <= nums < 10 for nums in nums):
        return False
    return True


<span style=“color: red”> pc.out</span>
1 0 1


==Rezolvare==
def pc(n, nums):
<syntaxhighlight lang="python" line>
     for i in range(n):
def is_lucky(x):
         if nums[i] % 2 == 0:
     for n in range(int(x**0.5)):
             fout.write("0 ")
         if (2*x - n*n + n) % (2*n+2) == 0:
             return True
    return False
def read_input_file(input_file):
    with open(input_file, 'r') as fin:
        T = int(fin.readline())
        x_values = list(map(int, fin.readline().split()))
       
    result = []
    for x in x_values:
        if is_lucky(x):
            result.append(1)
         else:
         else:
             result.append(0)
             fout.write("1 ")
           
    return result
def main(input_file, output_file):
    result = read_input_file(input_file)
    with open(output_file, 'w') as fout:
        fout.write(' '.join(map(str, result)))


if __name__ == '__main__':
    fin = open("pc.in")
    fout = open("pc.out", "w")
    n = int(fin.readline().strip())
    nums = list(map(int, fin.readline().split()))
    if validare(n, nums):
        print("Date de intrare valide")
        pc(n, nums)
    else:
        print("Date de intrare invalide")
    fin.close()
    fout.close()
</syntaxhighlight>
</syntaxhighlight>
==Explicatie==
Pentru a verifica dacă un număr este norocos, trebuie să verificăm toate valorile de n posibile, unde n <= sqrt(x), utilizând formula sumei unei secvențe de numere consecutive. Dacă găsim o astfel de valoare de n, înseamnă că x este norocos. În funcția de intrare citim valorile din fișier și apelăm funcția de validare pentru fiecare valoare, stocând rezultatele într-o listă. În final, scriem rezultatele în fișierul de ieșire.

Revision as of 16:18, 26 April 2023

Cerința

Gigel vrea un calculator nou care are prețul x. Tatăl acestuia, fiind profesor de matematica, i-a spus ca îi va cumpăra calculatorul dacă prețul x al acestuia este norocos. Un număr x este norocos dacă pătratul acestuia se poate scrie ca sumă de x numere consecutive. De exemplu, x = 7 este număr norocos deoarece, 7 * 7 = 4 + 5 + 6 + 7 + 8 + 9 + 10. Gigel a obţinut T oferte de preț și dorește să știe pentru fiecare dintre acestea dacă prețul este corespunzătar restricției pe care i-a impus-o tatăl său.

Date de intrare

Fișierul de intrare pc.in conține pe prima linie un singur număr natural T, reprezentând numărul de oferte. Pe a doua linie se află T numere naturale x1 x2 x3 … xT separate prin câte un spaţiu, cu semnificația din enunț.

Date de ieșire

Fișierul de ieșire pc.out va conține pe prima linie, separate prin câte un spațiu, cele T răspunsuri, în ordine: 1 dacă oferta este corespunzătoare restricției impuse și 0 în caz contrar.

Restricții și precizări

x < 2.000.000.000 T < 10

Exemplu:

pc.in def validare(n, nums):

   if not (1 <= n <= 2_000_000_000):
       return False
   if not all(0 <= nums < 10 for nums in nums):
       return False
   return True


def pc(n, nums):

   for i in range(n):
       if nums[i] % 2 == 0:
           fout.write("0 ")
       else:
           fout.write("1 ")


if __name__ == '__main__':

   fin = open("pc.in")
   fout = open("pc.out", "w")
   n = int(fin.readline().strip())
   nums = list(map(int, fin.readline().split()))
   if validare(n, nums):
       print("Date de intrare valide")
       pc(n, nums)
   else:
       print("Date de intrare invalide")
   fin.close()
   fout.close()

</syntaxhighlight>